1

我有一个 MainMenu.xib,而 AppController 是它的文件所有者。我添加-(void)awakeFromNib了效果很好的方法。现在,道路上的几轮固定装置awakeFromNib不再被调用,我不知道为什么。它拥有 xib,因此应在未归档时调用它。这是怎么回事?

编辑:

好吧,我重命名awakeFromNibsomething,并从...调用它,init这很有效。仍然困惑为什么awakeFromNib不是。我那里也有一个+(void) initialize方法,会不会搞砸了?

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


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

1 回答 1

3

在 nib 中设置文件所有者的类名只是为了让您可以告诉 Xcode 向您展示哪些对象的出口和操作,以便您可以连接起来。当应用程序运行并加载 nib 时,它不会影响实际是文件所有者的对象。

MainMenu nib 的 File's Owner 始终是应用程序对象,无论您在 Xcode 的检查器中为 FO 设置什么类名。将其设置为任何类名,但 NSApplication[1] 是错误的。

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

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


好吧,我重命名awakeFromNibsomething,并从...调用它,init这很有效。

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

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


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

于 2012-09-27T20:30:36.160 回答