我在 xcode 4.5 中创建了一个新项目,并调用了我的 viewcontroller
-(id)initWithNibName:bundle:
来自 appdelegate,因为它在默认项目模板中调用,我没有使用 Storyboard 但没有调用 awakeFromNib 我也进行了搜索,但无法理解为什么 awakeFromNib 没有调用。
通过 -(void)awakeFromNib
的苹果文档
“在从 Interface Builder 存档或 nib 文件加载接收器后,为服务准备接收器。”
"初始化符合NSCoding
协议(protocol)的对象(包括UIView和UIViewController的所有子类)
使用他们的 initWithCoder: 方法。所有不符合的对象
NSCoding 协议(protocol)使用它们的 init 方法进行初始化。在所有对象都被实例化之后
初始化后,nib 加载代码为所有这些对象重新建立导出和操作连接。然后它
调用对象的 awakeFromNib 方法。”
我的问题是为什么加载 xib 文件时 awakeFromNib 没有调用? 我做错了什么吗?请详细说明
最佳答案
awakeFromNib:仅当 view controller 在 nib 文件中时被调用。
在这种情况下,您使用 init initWithNibName:bundle 初始化 View Controller ,因此 View Controller 的内容在 nib 内部,而不是 View Controller 本身。
如果你打开 xib 文件,将一个对象拖到 xib 中并将类设置为你的 View Controller 类名,然后 awakeFromNib 将被调用(这种情况下你不需要手动初始化 View Controller )。
所以请记住在 xib 文件中有一个 View Controller 和一个不在 xib 文件中但所有内容都从 xib 文件加载的 View Controller 之间的区别。
PS: 我交替使用了 nib 和 xib。
编辑
我忘了告诉你如何解决这个问题。重写 viewDidLoad 来处理初始化的 socket 。
关于iphone - awakeFromNib 不是调用而是显示 xib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13729814/