gpt4 book ai didi

objective-c - 初始化 NSWindowController 子类

转载 作者:行者123 更新时间:2023-12-03 17:04:55 38 4
gpt4 key购买 nike

根据 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 创建的。我的 Nib 根本没有 Controller 对象。

最佳答案

问题是 [super initWithWindowNibName:@"MyDocument"] 只是一个方便的方法。它所做的只是调用[self initWithWindowNibName:@"MyDocument"owner:self]。这当然会抛出你的错误消息。您只需将 init 方法更改为:

即可解决此问题
- (id) init
{
NSLog(@"init()");
return [super initWithWindowNibName:@"MyDocument" owner:self];
}

关于objective-c - 初始化 NSWindowController 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11768511/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com