2016-03-21 14 views
0

Kodda bir model denetleyicisi başlatıyorum ve bir veri nesnesi boyunca iletmek istiyorum. Nesne için hedef VC üzerinde bir özellik oluşturdum. Yeni VC, iyi bir başlangıç ​​yapıyor ancak veri nesnesini almıyor. Aşağıdaki kodda bir sorun var mı? Aksi halde, başka bir yerde hata aramak zorunda kalacağım, ancak bunun veri nesnesini iletmenin doğru yolu olup olmadığını merak etmem gerekecek.iOS/object-c: Nesneyi yeni görünüm denetleyicisine geçirme

//in header file of destination VC 
@property (nonatomic, strong) Product *product; 

//in .m file of starting VC 
- (void) gotoStoryboard { 
    UIStoryboard *storyBoard = self.storyboard; 
    moreInfoVC *infoVC = 
    [storyBoard instantiateViewControllerWithIdentifier:@"moreInfo"]; 
     infoVC.product = _product;//IS THIS ADEQUATE TO PASS DATA OBJECT? 
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController: infoVC]; 
    [self presentModalViewController:nav animated:YES]; 
} 

cevap

0

prepareForSegue Storyboard temsilcisini kullanmalısınız.

Öncelikle böyle bir segue tanımlayıcı vasıtasıyla sonraki görünümüne geçmek için görünümü çağırır:

[self performSegueWithIdentifier:@"YourSegueIdentifier" sender:self]; 

Sonra yukarıdaki koduyla aynı .m dosyasında bu kodu ekleyin. Bu, bir sonraki görünümü sahip olmasını istediğiniz veri veya öğelerle hazırlar.

-(void)prepareForSegue:(UIStoryboard *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"YourSegueIdentifier"]) { 
     MoreInfoViewController * moreInfoVC = segue.destinationViewController; 
     // This is how you will pass the object or data you want for the next view 
     moreInfoVC.aStringToPass = @"I am passing this string"; 
     moreInfoVc.myCustomObjectToPass = theCustomObject; 
    } 
} 

O zaman segue ile gidiyoruz bakış .h dosyasında bir özellik olarak nesne olması gerekir.

// MoreInfoViewController.h 
@property NSString * aStringToPass; 
@property CustomObject * myCustomObjectToPass; 
0

Evet, kodunuz çalıştığını düşünüyorum, başka bir yerde hata arayın.
Ama yine de, 2 şey emin olmak için:

  • gotoStoryboard kullanıcı işleminden sonra uygulanır.
  • StoryBoard'da moreInfoVC Tanımlayıcısı moreInfo'a sahiptir. Bir şeyler ya da değil hedef kontrolöre göndermeden önce içeriyor _product olmadığını
0

denetleyin. Bizim kodunda

0

biz film şeridi segue tanımlamak izin ve sonra sadece bir düğme eylem içinde bu yürütme yönünde eğilimindedir:

performSegueWithIdentifier("Segue id", sender: self) 

Veya alternatif doğrudan hikaye kurulu bir düğmeye segue bağlamaktadır.

Sonra böyle prepareForSegue geçersiz:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "Segue id" { 
     let destinationController = segue.destinationViewController as? MyControllerClass 
     destinationController?.someProp = aValue 
    } 
} 

Biz nadiren gerçekte örnek yapar elle olarak Storyboard'dan bir görünüm denetleyicisi örneğini. Şansınız yoksa, bu yaklaşımı deneyebilirsiniz.

İlgili konular