6

我尝试覆盖 UIViewController 子类的默认 initWithNibName 指定初始化程序,如下所示:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Custom initialization
    }
    return self;
}

我还在头文件中包含了它的定义。但是,当我的 Application Delegate nib 加载视图控制器时,不会调用初始化程序,仅调用 -viewDidLoad。

那么 nib 魔法如何实例化我的视图控制器呢?为什么所有 XCode 模板都声明

// 指定的初始化器。如果您以编程方式创建控制器并希望执行不适合 viewDidLoad 的自定义,请覆盖。

当视图控制器从另一个笔尖加载时,我的 initWithNibName 没有被调用是否正确?

4

1 回答 1

17

您需要将初始化代码放入awakeFromNib方法中,以便在从 Nib 加载时运行它。Nib 文件包含它所包含的对象的存档版本,因此原则上它们不需要再次初始化。

于 2009-10-15T07:58:10.680 回答