我有一个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");
}
答案 0 :(得分:3)
在笔尖中设置文件所有者的类名只是为了告诉Xcode哪些对象的出口和操作可以显示给你,这样你就可以解决问题。当应用程序运行并且nib被加载时,它不会影响实际文件所有者的对象。
无论您在Xcode的检查器中为FO设置了什么类名,MainMenu nib的文件所有者始终是应用程序对象。将其设置为任何类名,但NSApplication [1]是错误的。
当您运行应用程序时,您应该在控制台中找到有关您尝试连接的AppController的任何出口或操作的错误消息。它们无法连接,因为应用程序对象没有它们。
在nib编辑器中更改类名,并在MainMenu笔尖中将AppController创建为自定义对象。
好吧,我将
awakeFromNib
重命名为something
,并从init
调用了那个... ...
这意味着init
被调用,这意味着你正在调用它。这是在笔尖中创建它的有效替代方法,但如果它不在笔尖或拥有笔尖,则不应覆盖awakeFromNib
。
您的选择:使用alloc
和init
继续创建AppController,或删除该代码并改为在MainMenu笔尖中创建。
[1]:或者,如果您已经将NSApplication子类化并将应用程序包的主要类更改为该子类,则为该子类的名称。