Cocoa - 没有调用awakeFromNib

时间:2012-09-27 20:06:42

标签: objective-c macos cocoa

我有一个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");
}

1 个答案:

答案 0 :(得分:3)

在笔尖中设置文件所有者的类名只是为了告诉Xcode哪些对象的出口和操作可以显示给你,这样你就可以解决问题。当应用程序运行并且nib被加载时,它不会影响实际文件所有者的对象。

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

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

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


  

好吧,我将awakeFromNib重命名为something,并从init调用了那个... ...

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

您的选择:使用allocinit继续创建AppController,或删除该代码并改为在MainMenu笔尖中创建。


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

相关问题