首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSWindowController windowDidLoad未调用

NSWindowController windowDidLoad未调用
EN

Stack Overflow用户
提问于 2010-04-23 01:44:03
回答 4查看 12.1K关注 0票数 10

我有一个使用NSWindowController子类的简单Cocoa应用程序。在我设定的笔尖上:

  • 文件所有者类到my NSWindowController子类
  • 文件所有者的“窗口”出口到nib.

中的主NSWindow

我的NSWindowController子类的init方法被称为(我称为超级),但不管我做什么,windowDidLoad永远不会被调用。

我一定是错过了一些显而易见的东西,但对于我的生活,我不知道它是什么。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-23 03:54:16

您试图通过在另一个nib中实例化NSWindowController实例来创建它。但是,当您在nib文件中实例化一个对象时,它是通过调用-initWithCoder:初始化的。

-initWithCoder:不是NSWindowController的指定初始化程序,因此您的NSWindowController实例从未实际加载它的nib。

与其通过将NSWindowController实例放在Interface中的MainMenu.xib文件中实例化,不如以编程方式创建它:

AppDelegate.h

代码语言:javascript
复制
@class YourWindowController;
@interface AppDelegate : NSObject
{
    YourWindowController* winController;
}
@end

AppDelegate.m

代码语言:javascript
复制
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification*)notification
{
    winController = [[YourWindowController alloc] init];
    [winController showWindow:self];
}
- (void)dealloc
{
    [winController release];
    [super dealloc];
}
@end

YourWindowController.m

代码语言:javascript
复制
@implementation YourWindowController
- (id)init
{
    self=[super initWithWindowNibName:@"YourWindowNibName"];
    if(self)
    {
        //perform any initializations
    }
    return self;
}
@end
票数 26
EN

Stack Overflow用户

发布于 2012-02-19 20:22:51

通过nib实例化窗口控制器是非常好的。与其使用windowDidLoad作为钩子,在这种情况下,您还需要使用awakeFromNib

票数 14
EN

Stack Overflow用户

发布于 2010-04-23 01:58:58

该窗口可能会按需加载--尝试将window发送到自己的-init中。有关更多信息,请参见the discussion of -[NSWindowController loadWindow] in the documentation

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2695671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档