View Controller两次调用awakeFromNib

han*_*han 4 cocoa objective-c

我正面临这个奇怪的问题而且我不确定我哪里出错了.

情况:

我有一个MainWindowController类,它将加载要显示的正确的nib.我创建了一个对象并将其更改为IB中的MainWindowController类,并将其与"MainWindowView"笔尖一起使用.

因此,基本上笔尖"MainWindowView"具有自定义视图和侧面的几个按钮,以便用户可以选择要加载的视图,并且它将加载其他相应的笔尖.我在IB中启动时隐藏了mainmenu,所以它只加载MainWindowView和其他nib文件.

然而,在调试时,当我在MainWindowController的awakeFromNib上放置NSLog时,我在控制台中看到它被调用了两次.

在我的项目中,我有一个startupController类和MainMenu.xib以及以下代码.

startUpController.h:

#import <Cocoa/Cocoa.h>
#import "MainWindowController.h"

@interface startupController : NSObject {
 MainWindowController *myWindowController;
}
@end
Run Code Online (Sandbox Code Playgroud)

startUpController.m:

#import "startupController.h"
@implementation startupController
-(void)awakeFromNib {
 [super init];
 if(myWindowController == nil)
 myWindowController = [[MainWindowController alloc] initWithWindowNibName:@"MainWindowView"];
 [myWindowController showWindow:self];
}
@end
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏.谢谢.

Tyl*_*don 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].