如何将对对象的引用传递给包含在导航控制器中的模态呈现的视图控制器?

Posted

技术标签:

【中文标题】如何将对对象的引用传递给包含在导航控制器中的模态呈现的视图控制器?【英文标题】:How to pass reference to object to a modally presented view controller that is contained inside a navigation controller? 【发布时间】:2013-03-18 00:10:08 【问题描述】:

我在传递对我的数据对象的引用时遇到问题。呈现视图控制器具有对数据对象的引用。模态视图控制器连接到导航控制器,并且是它的根视图控制器。这是我的做法:

介绍 VC:

- (IBAction)changeCustomerButtonPress:(UIButton *)sender     
    UINavigationController *customersNC = [self.storyboard instantiateViewControllerWithIdentifier:@"customersNC"];
    SCCustomersVC *customersVC = (SCCustomersVC *)[self.storyboard instantiateViewControllerWithIdentifier:@"customersVC"];
    customersVC.dataObject = self.splitVC.dataObject;

    //at this point, customersVC.dataObject exists

    [self presentViewController:customersNC animated:YES completion:nil];

模态VC出现时,self.dataObject为nil。

- (void)viewWillAppear:(BOOL)animated
       
    //self.dataObject is nil here.

这样做的正确方法是什么?

【问题讨论】:

【参考方案1】:

您在 IB 中的导航控制器是否有根视图控制器?如果,不应该。但是假设你有一个,你不应该实例化 SCCustomersVC,因为导航控制器会在它被实例化时这样做。要传递数据,只需使用 topViewController 获取对该控制器的引用:

SCCustomersVC *customersVC = (SCCustomersVC *)[customerNC topViewController];
    customersVC.dataObject = self.splitVC.dataObject;

【讨论】:

以上是关于如何将对对象的引用传递给包含在导航控制器中的模态呈现的视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

c ++多态 - 将对基类的引用传递给函数

通过传递数据。导航控制器

如何将数据从rails中的控制器传递给模态?

跳转到导航堆栈中的某个点

我可以使用 useRef 将对元素的引用传递给孩子吗?

如何将对象传递给 C++ 中的函数?