NSArray *allControllers = self.navigationController.viewControllers;
UITableViewController *parent = [allControllers lastObject];
[parent myFunction]; // not work
myFunction是父级的一个函数,但是这个代码不起作用,哪里错了
答案 0 :(得分:6)
[self.navigationController.viewControllers lastObject]
将返回最后一个控制器推送到堆栈,这是您正在执行此代码的控制器。要获得以前的控制器,您可以使用[allControllers objectAtIndex:allControllers.count - 2]
,但这是一个非常糟糕的主意:
1)没有人可以保证你的控制器有一天不会成为根控制器。然后上面的代码会使你的应用程序崩溃,因为之前没有控制器。
2)没有人能保证有人不会在你之前推出“错误”的控制器。
所以我的建议 - 在你的'子'控制器中设置@property (retain) ParentController *parentController;
之类的属性,并明确地将其设置为指向'父'控制器。
答案 1 :(得分:1)