我有一个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");
}
最佳答案
在笔尖中设置文件所有者的类名仅是为了使您可以告诉Xcode向对象显示哪些对象的出口和操作,从而可以进行连接。当应用程序运行并且笔尖被加载时,它并不影响哪个对象实际上是文件的所有者。
无论您在Xcode的检查器中为FO设置了什么类名,MainMenu笔尖的“文件所有者”始终是应用程序对象。将其设置为NSApplication [1]以外的任何类名是错误的。
在运行应用程序时,您应该在控制台中找到有关尝试连接的AppController的所有插座或操作的错误消息。它们无法连接,因为应用程序对象没有它们。
重新在nib编辑器中更改类名称,然后在MainMenu nib中将AppController创建为自定义对象。
好吧,我将awakeFromNib
重命名为something
,并从init
调用了它。
这意味着init
被调用,这意味着您正在调用它。这是在笔尖中创建它的有效替代方法,尽管如果awakeFromNib
不在笔尖中或不拥有它,则您不应覆盖它。
您的选择:继续使用alloc
和init
创建AppController,或者删除该代码并在MainMenu nib中创建它。
[1]:或者,如果您继承了NSApplication的子类,并将应用程序捆绑包的主体类更改为该子类,则该子类的名称。
关于objective-c - cocoa -不叫awakeFromNib,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12629241/