我正面临着这个奇怪的问题而且我不确定我哪里出错了。
情况:
我有一个MainWindowController类,它将加载要显示的正确的nib。 我创建了一个对象并将其更改为IB中的MainWindowController类,并将其与“MainWindowView”笔尖一起使用。
基本上,笔尖“MainWindowView”具有自定义视图和侧面的几个按钮,以便用户可以选择要加载的视图,并且它将加载其他相应的笔尖。我在IB中启动时隐藏了mainmenu,所以它只加载MainWindowView和其他nib文件。
虽然在调试时,当我在MainWindowController的awakeFromNib上放置NSLog时,我在控制台中看到它被调用了两次。
在我的项目中,我有一个与MainMenu.xib一起使用的startupController类,代码如下。
startUpController.h:
#import <Cocoa/Cocoa.h>
#import "MainWindowController.h"
@interface startupController : NSObject {
MainWindowController *myWindowController;
}
@end
startUpController.m:
#import "startupController.h"
@implementation startupController
-(void)awakeFromNib {
[super init];
if(myWindowController == nil)
myWindowController = [[MainWindowController alloc] initWithWindowNibName:@"MainWindowView"];
[myWindowController showWindow:self];
}
@end
任何帮助表示赞赏。感谢。
答案 0 :(得分:7)
听起来你正在创建两个MainWindowController对象,因此将为每个对象调用一次awakeFromNib。
startupContoller方法中的awakeFromNib正在创建一个MainWindowController对象并使用MainWindowView nib初始化它。如果您还向该nib添加了一个对象并将其类型设置为MainWindowController,则在加载该nib时将创建另一个MainWindowController对象。
您应该从MainWindowView nib中删除MainWindowController对象,而是将File的Owner对象的类型设置为MainWindowController。 (MainWindowController应该是NSWindowController的子类)您连接到您创建的对象的任何连接都应该连接到File的所有者。
此外,您不应该在awakeFromNib中调用[super init]。你应该只在init方法中调用[super init]。