2010-09-07 100 views
6

我需要将一些自定义逻辑放到我的iPhone应用程序中,以便根据您运行的是哪个iOS版本,选择不同的XIB文件(即iPhone或iPad将显示不同的XIB文件)。initWithNibName未被调用

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

所以我实现了:

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

方法,才发现,它并没有被调用。 (我有一个断点和日志语句在里面,没有被击中)。

有谁知道这可能是为什么? 我该如何实现此功能?

我读过initWithNibName只有在你调用它的时候才会调用,也就是说,当你以编程方式构造你的视图层次时,这是真的吗?

回答

7

如果你没有做这样的事情将它添加到您的导航控制器之前:

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

然后有很好的机会,你要替换错误的方法。

如果你的视图控制器存在于一个nib文件中,比如你的导航控制器的nib文件,它将作为新的视图控制器对象从nib文件中取消存档,而不是用它自己的nib文件创建,所以上述方法将不会被调用。

您必须改写-awakeFromNib

+0

好的,我明白了,谢谢,那么我怎么能从该方法中选择XIB? – Mark 2010-09-08 00:44:44

+0

选择xib是什么意思? – BoltClock 2010-09-08 00:48:12

+0

好吧,我想要不同的XIB文件,取决于即时通讯在iPad或iPhone上运行,我如何实现这一目标? – Mark 2010-09-08 00:49:04

6

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

+0

好的,那么我怎么能从这个方法中选择XIB? – Mark 2010-09-08 00:44:16