iOS/objective-c:将对象传递给新的视图控制器



我正在代码中启动一个模态视图控制器,并希望传递一个数据对象。 我已经在目标 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];
}

您应该使用 prepareForSegue 情节提要委托。

首先,通过如下所示的 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;

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

  • gotoStoryboard在用户操作后实现。
  • 在情节提要中,moreInfoVC具有标识符moreInfo

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

在我们的代码中,我们倾向于让故事板定义 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
    }
}

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

相关内容

  • 没有找到相关文章

最新更新