【发布时间】:2012-08-01 22:30:27
【问题描述】:
根据 Apple 的documentation,初始化 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
所以……嗯?怎么回事?
stackoverflow question 关于 init() 被调用了两次,解决方法是一个实例是通过代码创建的,另一个是通过 nib 创建的。我的笔尖根本没有控制器对象。
【问题讨论】:
标签: objective-c cocoa