2016-03-21 154 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 
    } 
} 

我们很少真正从手工为你的例子确实故事板创建一个视图控制器。如果你没有运气,你可以尝试这种方法。

相关问题