我有一个有点复杂的视图,我将它放在一个单独的(基于视图的模板)项目中(视图控制器在 MainWindow.xib 中用橙色图标表示)。现在已经够远了,我决定将它移到另一个项目中,它将由导航控制器管理。它是从 UINavigationController 相当简单的pushViewController: animated:方法调用的。
MyViewController 有一个相应的 nib 文件(也许我的一些困惑是类和 nib 的名称几乎相同,只是后缀 .m、.h 和 .xib 不同)。当这是在初始项目中启动时的初始视图时,实例化时将调用awakeFromNib和initWithCoder 。现在似乎 只有viewDidLoad被调用了。
我对什么/为什么会有这样的差异感到困惑?!?我在 SO 上找到了一些其他相关的线程,但它们仍然让我摸不着头脑,回答如下: “当控制器本身从 nib 取消归档时调用 awakeFromNib。创建/取消归档视图时调用 viewDidLoad。这个当控制器的视图存储在单独的 nib 文件中时,区别尤其重要。”
区别似乎取决于什么,确切地说,正在取消归档 View或ViewController。因此,如果 ViewController 正在被实例化并被推送,那么我应该只期望 viewDidLoad 被调用?另一方面,如果我的 ViewController 有一个 IBOutlet(以及一个表示它的对象 VC 对象已被拖到我的 Nib 中),那么我可以期望 initWithCoder 和 awakeFromNib 都被调用?
有人可以帮我纠正一下吗?如果在非常具体的情况下任意调用不同的方法,似乎更难以重用这些视图/控制器......或者,当然是这样,这正是它们被调用的原因,而不是非常具体的情况......我只是还不完全理解每种方法之间的划分。
有人愿意帮助我纠正吗?