在UINavigationController中如何调用父代的函数

时间:2011-03-09 13:46:46

标签: iphone objective-c

NSArray *allControllers = self.navigationController.viewControllers;
UITableViewController *parent = [allControllers lastObject];
[parent myFunction]; // not work

myFunction是父级的一个函数,但是这个代码不起作用,哪里错了

2 个答案:

答案 0 :(得分:6)

[self.navigationController.viewControllers lastObject]将返回最后一个控制器推送到堆栈,这是您正在执行此代码的控制器。要获得以前的控制器,您可以使用[allControllers objectAtIndex:allControllers.count - 2],但这是一个非常糟糕的主意:

1)没有人可以保证你的控制器有一天不会成为根控制器。然后上面的代码会使你的应用程序崩溃,因为之前没有控制器。

2)没有人能保证有人不会在你之前推出“错误”的控制器。

所以我的建议 - 在你的'子'控制器中设置@property (retain) ParentController *parentController;之类的属性,并明确地将其设置为指向'父'控制器。

答案 1 :(得分:1)

检查documentation我看不到对该方法的任何引用。

您可以发布错误消息吗?

类似的问题是already answered,请看一下建议的解决方案。

问候。