1

我的问题很简单:在 iPhone/iPad 模拟器上,当你推送一个 nil 视图控制器时,你会看到亲切的消息

Application tried to push a nil view controller on target

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

但是,我怀疑这是否会在真正的 iOS 设备上运行。由于我无法在这个开发的早期阶段进行部署,我想知道这个操作是否会导致崩溃,或者它会优雅地什么都不做(如预期的那样)。此外,如果它可以在 iOS 上运行,我会在审查过程中因为做“坏事”而被 Apple 扇耳光吗?

4

2 回答 2

2

当涉及到 Cocoa Touch 方法时,你永远不应该传递一个 nil 参数,除非参考文档明确声明一个 nil 参数是有效的。如果文档不明确,请不要依赖经验测试(在模拟器或其他方式中)来确定它是安全的。Apple 可能会发布未来的操作系统更新,这会突然导致您的应用开始为现有用户崩溃。然后他们会给你的应用差评一两个星期,而 Apple 会审查你的修补程序。只是不值得冒险。

的文档pushViewController:animated:没有指定如果给定 nil 参数它将如何表现,因此请放心使用并在代码中测试 nil。

于 2011-07-20T10:22:59.890 回答
1

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

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

于 2011-07-20T09:03:52.787 回答