gpt4 book ai didi

objective-c - cocoa - awakeFromNib 未被调用

转载 作者:行者123 更新时间:2023-12-03 16:58:22 25 4
gpt4 key购买 nike

我有一个 MainMenu.xib,AppController 是它的文件所有者。我添加了 -(void)awakeFromNib 方法,效果很好。现在,一系列的修复awakeFromNib不再被调用,我不明白为什么。它拥有 xib,因此应该在取消归档时调用它。这是怎么回事?

编辑:

好吧,我将 awakeFromNib 重命名为 something,并从 init 调用它......这有效。仍然困惑为什么 awakeFromNib 没有。我那里还有一个 +(void)initialize 方法,这会搞砸什么吗?

- (id)init {
self = [super init];
if (self) {
[self something];
}
return self;
}


-(void)something {
NSLog(@"yup");
}

最佳答案

在 nib 中设置文件所有者的类名只是为了告诉 Xcode 要向您显示什么对象的导出和操作,以便您可以将其连接起来。当应用程序运行并且加载 Nib 时,它不会影响哪个对象实际上是文件的所有者。

无论您在 Xcode 的检查器中为 FO 设置什么类名,MainMenu Nib 的文件所有者始终是应用程序对象。将其设置为除 NSApplication[1] 之外的任何类名都是错误的。

当您运行应用程序时,您应该在控制台中找到有关您尝试连接的 AppController 的任何 socket 或操作的错误消息。它们无法连接,因为应用程序对象没有它们。

在 Nib 编辑器中重新更改类名,并在 MainMenu Nib 中将 AppController 创建为自定义对象。

<小时/>

Well, I renamed awakeFromNib to something, and called that from init... that worked.

这意味着 init 正在被调用,这意味着您正在调用它。这是在 Nib 中创建它的有效替代方法,但如果它不在 Nib 中或不拥有 Nib ,则不应覆盖 awakeFromNib

您的选择:继续使用 allocinit 创建 AppController,或者删除该代码并在 MainMenu Nib 中创建它。

<小时/>

[1]:或者,如果您已对 NSApplication 进行子类化并将应用程序包的主类更改为该子类,则为该子类的名称。

关于objective-c - cocoa - awakeFromNib 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12629241/

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