我是Stack Overflow的新手,但是我发现了这个问题,并且发现了一些其他方法来加载一个确保viewDidLoad方法自动调用的nib文件。是正确的,但它需要你去ViewController的代码之外来加载nib文件,这里我提供的这两个例子允许你将代码保存在ViewController的实现中,不一定是更好的方法,只是不同而已。以做这种方式,请让我知道你的想法
首先,initWithNibName内:包:你的UIViewController子类的方法,可以取代电话:
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
像这样的东西:
self = [super initWithNibName:@"NameOfAlternateNibFile" bundle:nibBundleOrNil];
或者,你可以做到这似乎由以下做同样的事情:
[[NSBundle mainBundle] loadNibNamed:@"NameOfAlternateNibFile" owner:self options:nil];
[self setView:self.view]; //this line ensures that the viewDidLoad method is called
的关键是了解什么是写在UIViewController.h文件中的函数定义$initWithNibName:bundle:
上方的注释(在我的答案的底部包含,请参见斜体)。
使用这两种方法之一做这件事的好处是viewDidLoad在任何一种情况下都会被调用。
以下是UIViewController.h列出的指令:
指定初始化。如果你的 子类UIViewController,你必须调用这个 方法的超级实现,即使你没有使用 NIB。 (为了方便,默认的 init方法将为您执行此操作,并且 为这两个方法 参数指定nil。)在指定的NIB时, 文件的所有者代理应该有 类设置为您的视图控制器 子类,它连接到主视图的视图出口 。如果 调用此方法的名称为nil ,那么此类的'-loadView 方法将尝试加载名称与您的视图 控制器类相同的NIB 。如果没有这样的NIB在 事实存在,那么您必须 电话-setView:前 - 视图是 调用,或重写-loadView方法以编程方式设置你的观点。 - (ID)initWithNibName:(的NSString *)nibNameOrNil束:(一个NSBundle *)nibBundleOrNil;
不,这似乎是这种情况无论是。加载的视图显示正常,但viewDidLoad永远不会被调用。我可以在从笔尖加载的“普通”控制器上的viewDidLoad中由[UIViewController的视图]称为调试器堆栈看到,但似乎并不适用于控制器的制成手'。 – 2009-05-24 05:53:48