我在xcode 4.5中创建了一个新项目,调用了我的视图控制器
-(id)initWithNibName:bundle:
来自appdelegate,因为它在默认项目模板中调用,而我没有使用情节提要但wakeFromNib没有被调用我也搜索过,但无法理解为什么wakeFromNib没有调用。
苹果-(void)awakeFromNib
文档从接口生成器存档或nib文件加载接收器后,准备接收器进行服务"初始化符合NSCoding
协议的对象(包括UIView和UIViewController的所有子类)使用他们的initWithCoder:方法。所有不符合的对象到NSCoding协议使用它们的init方法进行初始化。在所有对象都已实例化并初始化后,nib加载代码重新建立所有这些对象的出口和动作连接。然后调用对象的awakeFromNib方法。">
我的问题是,当xib文件被加载时,为什么wakeFromNib没有调用?我做错什么了吗?请详细说明
wakeFromNib:仅当视图控制器在nib文件内时调用
在这种情况下,您使用init initWithNibName:bundle初始化视图控制器,因此视图控制器的内容在nib内部,而不是视图控制器本身
如果打开xib文件,在xib中拖动一个对象,并将该类设置为视图控制器类名,则会调用wakeFromNib(在这种情况下,您不需要手动初始化视图控制器)
因此,请记住在xib文件中具有视图控制器和在xib中不具有视图控制器,而是从xib文件加载其所有内容之间的区别。
PS: 我交替使用了nib和xib
编辑
我忘了告诉你如何绕过它。重写viewDidLoad以处理初始化的outlet。
为什么不将-(id)initWithNibName:bundle:方法添加到您的子类中,而不是-(void)wakeFromNib?
我的"wakeFromNib"方法调用得很好,但我用加载视图控制器
myViewController *vc = [[[NSBundle mainBundle] loadNibNamed:@"myViewController" owner:self options:nil] objectAtIndex:0];
所以我想知道你的wakeFromNib是否因为使用initWithNibName而没有被调用?
编辑:我刚刚看到你的评论,你正在将wakeFromNib添加到XCode创建的默认项目的ViewController中。创建项目时,是否取消选中"使用情节提要"框?如果你的笔尖在项目的主故事板内,你可能需要跳过一些额外的障碍。