为什么UIViewController的子类的init方法有时不加载相同的名称nib文件?

时间:2011-10-24 02:27:26

标签: uiviewcontroller nib init

我知道UIViewController的指定初始化程序是

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

如果您致电init,根据文档,它将加载该类的同名nib文件(如果存在)。

但我遇到的是有时候init确实做对了。但有时一些UIViewController的子类的init方法只是不加载它的nib文件。我使用相同的方式创建它们(使用Xcode的助手创建一个UIViewController子类,同时它是关联的nib文件,因此文件名应该都是相同的。)

为什么会这样?

1 个答案:

答案 0 :(得分:1)

我发现如果该类是UITableViewController的子类,则必须使用 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 来自笔尖的初始化。

这是因为UIViewController的指定初始化程序是:

(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

因此,如果您使用init,则会为您致电(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

但是UITableViewController的指定初始化程序是:

- (id)initWithStyle:(UITableViewStyle)style

在UITableViewController上使用init会调用initWithStyle而不是initWithNibName