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

Wan*_*ang 2 iphone objective-c

NSArray *allControllers = self.navigationController.viewControllers;
UITableViewController *parent = [allControllers lastObject];
[parent myFunction]; // not work
Run Code Online (Sandbox Code Playgroud)

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

hoh*_*oha 6

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

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

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

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