Cocoa - awakeFromNib 没有被调用
Posted
技术标签:
【中文标题】Cocoa - awakeFromNib 没有被调用【英文标题】:Cocoa - awakeFromNib is not called 【发布时间】:2012-09-27 20:06:41 【问题描述】:我有一个 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】:在 nib 中设置 File's Owner 的类名只是为了告诉 Xcode 向您显示哪些对象的出口和操作,以便您可以连接。当应用程序运行并加载 nib 时,它不会影响实际上文件所有者的对象。
无论您在 Xcode 的检查器中为 FO 设置什么类名,MainMenu nib 的 File's Owner 始终是应用程序对象。将其设置为任何类名,但 NSApplication[1] 是错误的。
当您运行您的应用程序时,您应该会在控制台中找到有关您尝试连接的 AppController 的任何出口或操作的错误消息。它们无法连接,因为应用程序对象没有它们。
在 nib 编辑器中更改类名,并在 MainMenu nib 中将您的 AppController 创建为自定义对象。
好吧,我将
awakeFromNib
重命名为something
,并从init
中调用它......这行得通。
这意味着init
正在被调用,这意味着您正在调用它。这是在 nib 中创建它的有效替代方法,但如果 awakeFromNib
不在 nib 中或拥有它,则不应覆盖它。
您的选择:继续使用 alloc
和 init
创建 AppController,或者删除该代码并改为在 MainMenu nib 中创建它。
[1]:或者,如果您已将 NSApplication 子类化并将应用程序包的主体类更改为该子类,则为该子类的名称。
【讨论】:
嘿,我似乎记得几个月前在主 xib 中弄乱了自定义对象,我敢打赌我删除了它。我试图调用的代码检查首选项以获取一些数据。现在我认为把它放在 awakeFromNib 中实际上是一个错误的地方。以上是关于Cocoa - awakeFromNib 没有被调用的主要内容,如果未能解决你的问题,请参考以下文章