objective-c - View Controller 两次调用 awakeFromNib

标签 objective-c cocoa

我正面临这个奇怪的问题,但我不确定哪里出错了。

情况:

我有一个 MainWindowController 类,它将加载要显示的正确 Nib 。 我创建了一个对象并将其更改为 IB 中的 MainWindowController 类,并将其与“MainWindowView”nib 一起放置。

所以基本上 nib“MainWindowView”具有自定义 View 和侧面的几个按钮,以便用户可以选择要加载的 View ,它将加载其他相应的 nib。我在 IB 中启动时隐藏了主菜单,因此它只加载带有其他 nib 文件的 MainWindowView。

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

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

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

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

最佳答案

听起来您正在创建两个 MainWindowController 对象,因此将为每个对象调用一次 awakeFromNib。

startupContoller 方法中的 awakeFromNib 正在创建一个 MainWindowController 对象并使用 MainWindowView nib 对其进行初始化。如果您还向该 Nib 添加了一个对象并将其类型设置为 MainWindowController,则在加载 Nib 时将创建另一个 MainWindowController 对象。

您应该从 MainWindowView nib 中删除 MainWindowController 对象,而是将 File's Owner 对象的类型设置为 MainWindowController。 (MainWindowController 应该是 NSWindowController 的子类)任何连接到您创建的对象的连接都应该连接到文件的所有者。

此外,您不应该在 awakeFromNib 中调用 [super init]。您应该只在 init 方法中调用 [super init]。

关于objective-c - View Controller 两次调用 awakeFromNib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4152876/

相关文章:

ios - 没有正确获得合理的 UILabel 属性文本

iphone - NSCocoaErrorDomain 代码=256

具有可选命令行模式的 Cocoa 应用程序

objective-c - 如何将 NSTableView 保存为文本或 html

ios - 如何卸下键盘。正常方法不起作用。 objective-c

ios - 如何实现SKActionTimingFunction?

objective-c - 找出添加到 NSMutableArray 的哪个对象为 nil

objective-c - 为 SQLCipher 问题加密数据库

ios - 如何将局部变量更改为实例变量?

objective-c - Mac Mountain Lion 从 CLI 应用发送通知