在部署的应用程序上推送nil视图控制器

时间:2011-07-20 08:59:52

标签: iphone objective-c ios null pushviewcontroller

我的问题非常简单: 在iPhone / iPad模拟器上,当您按下一个nil视图控制器时,您会受到优雅消息的欢迎

Application tried to push a nil view controller on target

之后,应用程序继续执行,好像什么也没发生。这完全我想要的应用程序类型(我有一个工厂方法,如果遇到创建实例的错误请求,则返回nil)。

然而,我怀疑它是否会像真正的iOS设备一样飞行。由于我不能在这个早期的开发阶段进行部署,我想知道这个动作是否会导致崩溃,或者它会慷慨地做什么(如预期的那样)。此外,如果它适用于iOS,那么在审核过程中我是否会因为做“坏事”而被苹果打耳光?

2 个答案:

答案 0 :(得分:2)

对于Cocoa Touch方法,除非参考文档明确声明nil参数有效,否则不应传递nil参数。如果文档含糊不清,请不要依赖经验测试(在模拟器中或其他方式)来确定它是安全的。 Apple可能会发布未来的操作系统更新,突然导致您的应用程序开始为现有用户崩溃。然后,当Apple检查您的修补程序时,他们会在一两周内给您的应用程序提供差评。这不值得冒风险。

如果给出一个nil参数,pushViewController:animated:的文档没有说明它的行为方式,所以请安全地使用它并在代码中测试nil。

答案 1 :(得分:1)

这意味着您正在尝试推送尚未分配的视图控制器 。在将视图控制器推入导航控制器之前,请确保视图控制器不是 nil

如果 nil 被推入导航控制器堆栈,应用程序只会抛出消息“应用程序试图将nil视图控制器推送到目标... ”,在控制台中,它不会干扰应用程序的执行。但是,通过检查 nil 来防止任何意外行为,这样做更安全。