0

我正在代码中启动一个模态视图控制器,并希望传递一个数据对象。我在目标 VC 上为该对象创建了一个属性。新的 VC 启动正常,但没有获取数据对象。下面的代码有什么问题吗?如果不是,我将不得不在其他地方寻找错误,但想知道这是否是传递数据对象的正确方法。

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

4 回答 4

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;
于 2016-03-22T04:31:59.163 回答
0

在发送到目标控制器之前,首先检查_product是否包含某些内容。

于 2016-03-21T03:27:55.223 回答
0

是的,我认为您的代码有效,请在其他地方查找错误。
但是,仍然需要确保两件事:

  • gotoStoryboard是在用户操作后实现的。
  • 在 StoryBoard 中moreInfoVC有 Identifier moreInfo
于 2016-03-21T02:18:33.553 回答
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
    }
}

我们很少像您的示例那样手动从情节提要中手动实例化视图控制器。如果你运气不好,你可以试试这个方法。

于 2016-03-21T07:14:05.680 回答