wakeFromNib不是在调用而是在显示xib



我在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中。创建项目时,是否取消选中"使用情节提要"框?如果你的笔尖在项目的主故事板内,你可能需要跳过一些额外的障碍。

相关内容

  • 没有找到相关文章

最新更新