2016-03-21 146 views
0

我在代碼中啓動模態視圖控制器,並希望傳遞數據對象。我已經在對象的目標VC上創建了一個屬性。新的VC正在啓動,但沒有獲取數據對象。下面的代碼有什麼問題嗎?如果沒有,我將不得不在其他地方尋找錯誤,但是想知道這是否是傳遞數據對象的正確方法。iOS/objective-c:將對象傳遞到新的視圖控制器

//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]; 
} 

回答

0

您應該使用prepareForSegue Storyboard委託。

首先調用視圖經由SEGUE標識符移動到下一個視圖是這樣的:

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

然後就在相同.m文件與上述代碼添加以下代碼。這將準備下一個視圖,其中包含您想要的數據或項目。

-(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; 
    } 
} 

然後,您必須將該對象作爲要與segue一起使用的.h文件中的屬性。

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

是的,你的代碼我認爲可行,在其他地方尋找錯誤。
但儘管如此,兩件事情,以確保:

  • gotoStoryboard是用戶操作後執行。
  • 在StoryBoard的moreInfoVC有標識符moreInfo
0

首先檢查是否_product它在發送到目標控制器之前是否包含某些內容。

0

在我們的代碼,我們傾向於讓故事板定義SEGUE,然後就執行該按鈕的動作中:

performSegueWithIdentifier("Segue id", sender: self) 

或可替代的SEGUE直接鏈接到一個按鈕,在故事板。

然後我們覆蓋prepareForSegue這樣的:

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

我們很少真正從手工爲你的例子確實故事板創建一個視圖控制器。如果你沒有運氣,你可以嘗試這種方法。

相關問題