self.navigationController的不同值(nil和non-nil)取决于堆栈位置

时间:2009-04-05 21:30:09

标签: iphone objective-c uinavigationcontroller

我有一个UIViewController子类,可以访问viewDidLoad中的self.navigationController:。根据它在视图堆栈中的位置,我将获得navigationController或者我将获得nil。

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

如果我的堆栈是“RootViewController - > AnotherViewController - > MyViewController”,我就没有了。

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我通常做的是子类UIViewController并添加一个方法来设置navigationController。没有理由不将它作为读/写,特别是考虑到Apple的类决定不设置navigationController(或者parentController,即使它们在同一堆栈中)的频率。