【发布时间】:2014-12-11 22:05:23
【问题描述】:
我正在经历一些非常奇怪的事情:
创建一个非常基本的单视图项目,并将第二个视图控制器添加到情节提要,以及从第一个到第二个的模态segue。从视图控制器启动 segue 并使用 performSegueWithIdentifier: 以编程方式触发它。
在模态显示的视图控制器的viewDidLoad 中,添加此日志:
NSLog(@"%@", self.presentingViewController);
现在在 iOS 7 上运行应用程序,您应该会得到一个类似这样的日志:
<ViewController: 0x7fa8e9530080>
这只是应用程序初始视图控制器的引用,它呈现了模态视图控制器。
现在在 iOS 8 上运行完全相同的东西,你会得到:
(null)
这里发生了什么?这是一个已知问题吗?当然,我希望两个系统上的行为完全相同。
【问题讨论】:
-
viewDidLoad 确实应该用于初始化,在这个阶段,不能保证接收者的控制器视图层次结构已经放置在导航树中。如果这是您的意图,您应该覆盖 viewWillAppear 或 viewDidAppear。虽然它在早期版本中有效,但文档明确指出它应该用于额外的初始化。听起来确实好像在 iOS 8 中,接收器的初始化被更早地执行了。
-
嗯..这很有道理..我会做一些测试,让你知道你是否应该把你的评论变成答案
-
@MDB983: 事实证明你是对的,即使在 viewWillAppear: 中设置了呈现视图控制器。如果您想将您的评论变成答案,我很乐意接受。
标签: ios objective-c ios7 uiviewcontroller ios8