initWithNibName没有被调用

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

我从一开始就构build了完整的iPhone应用程序,使用tabbarcontroller和每个标签中的标准导航控制器。

所以我实现了:

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

方法,只是发现它没有被调用。 (我有一个断点和日志的声明,没有被击中)。

有谁知道这可能是为什么? 或者我如何实现这个function?

我已经读过initWithNibName只有当你调用它时,也就是说,当你编程构造你的视图层次结构,这是真的?

如果您在将其添加到导航控制器之前没有这样做:

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

那么机会是好的,你压倒了错误的方法。

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

您将不得不重写-awakeFromNib

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