0

我有一个 UIViewController 子类,它在 viewDidLoad: 中访问 self.navigationController。根据它在视图堆栈中的位置,我要么得到 navigationController,要么得到 nil。

如果我的堆栈是“RootViewController -> MyViewController”,我会得到一个有效的指针。

如果我的堆栈是“RootViewController -> AnotherViewController -> MyViewController”,我会得到零。

在这两种情况下,MyViewController 都被推入堆栈:

[self.navigationController pushViewController:self.myViewController 
                           animated:YES];

这让我陷入了困境,因为我需要能够在 MyViewController 上方的堆栈中推送另一个 ViewController,这在第一种情况下工作正常,但在第二种情况下显然失败了。

4

2 回答 2

0

从我可以看到的所有内容中,UIViewController 的 self.navigationController 旨在始终返回适当的 UINavigationController,只要 UIViewController 存在于 UINavigationController 的堆栈中。这可能是我似乎更经常遇到的情况之一,其中一个简单的编码错误伪装成更复杂的东西。在这些情况下,我通常很幸运地设置了一个全新的 Xcode 项目,它使用重现问题所需的最少代码,并且在该过程中我找到了一个我忽略的东西的修复程序,然后可以轻松地将其应用到主项目中. 很抱歉我不能 t 提供更多细节,但您所描述的似乎与 Cocoa Touch 框架的设计背道而驰,如果您仍然可以在严格按照文档编写的最小 Xcode 项目中重现它,那么提交错误报告可能是个好主意与苹果。希望你会发现一些你忽略的简单的东西,并在几分钟内踢自己=)

于 2009-04-06T04:46:16.680 回答
0

我通常做的是子类 UIViewController 并添加一个方法来设置 navigationController。没有理由不将其作为读/写,尤其是考虑到 Apple 的类多久会决定不设置 navigationController(或 parentController,就此而言),即使它们在同一个堆栈中。

于 2010-08-19T10:10:16.390 回答