根据 Apple 的文档,初始化 NSWindowController 子类的推荐方法是调用 init() 而不是 initWithWindowNibName()。文档继续说,由于 NSWindowController 可能只适用于它设计的 nib,然后让子类调用 super initWithWindowNibName,如果任何 initWithWindowNib... 方法是,子类应该记录一个错误叫。
所以这就是我写的:
- (id) init
{
NSLog(@"init()");
return [super initWithWindowNibName:@"MyDocument"];
}
- (id) initWithWindowNibName:(NSString *)windowNibName
{
NSLog(@"error...use init() instead");
return nil;
}
- (id) initWithWindowNibName:(NSString *)windowNibName owner:(id)owner
{
NSLog(@"error...use init() instead");
return nil;
}
- (id) initWithWindowNibPath:(NSString *)windowNibPath owner:(id)owner
{
NSLog(@"error...use init() instead");
return nil;
}
当它运行时,我看到输出:
init()
error...use init() instead
所以……嗯?这是怎么回事?
有一个关于 init() 被调用两次的stackoverflow 问题,解决方法是一个实例是通过代码创建的,另一个是通过 nib 创建的。我的笔尖根本没有控制器对象。