initWithNibName未被调用

时间:2010-09-07 23:18:27

标签: ios objective-c iphone ipad cocoa-touch

我需要在我的iPhone应用程序中添加一些自定义逻辑,以便根据您运行的iOS版本,选择不同的XIB文件(即iPhone或iPad将显示不同的XIB文件)。

我从第一天开始构建了整个iPhone应用程序并且一切都很好,使用tabbarcontroller和每个标签中的标准导航控制器。

所以我实现了:

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle

方法,只是发现它没有被调用。 (我有一个断点和日志语句,没有任何东西被击中)。

有谁知道为什么会这样? OR 我该如何实现此功能?

我已经读过某个地方,只有在调用它时才调用initWithNibName,即当你以编程方式构造视图层次结构时,这是真的吗?

2 个答案:

答案 0 :(得分:7)

如果您在将其添加到导航控制器之前没有做过类似的事情:

SomeViewController *someViewController = [[SomeViewController alloc] initWithNibName:...];

然后很可能你的方法很糟糕。

如果您的视图控制器位于nib文件中,比如导航控制器的nib文件,它将从nib文件中取消归档为新的视图控制器对象,而不是使用自己的nib文件创建,因此上述方法获胜不被人打电话。

您必须改为覆盖-awakeFromNib

答案 1 :(得分:6)

如果您的视图控制器是从.xib文件加载的,那么将调用initWithCoder:initWithNibName:bundle:方法仅用于以编程方式创建视图控制器。