在OSX应用程序中没有调用windowControllerDidLoadNib

时间:2013-11-05 22:21:34

标签: objective-c macos cocoa

我注意到我的OSX应用程序(基于文档)有一种奇怪的行为,我觉得我在这里做错了。

当我从Xcode运行我的应用程序时,它运行良好,一切正常。 如果我按下命令+ Q退出应用程序,这一切都很好。

当我通过按Xcode中的停止按钮退出应用程序时,应用程序会像往常一样停止,但是当我下次运行它时,我的windowControllerDidLoadNib没有被调用,直到我点击停靠菜单中的应用程序图标(应用程序是虽然跑了,我检查了活动监视器。)

Document.m

- (NSString *)windowNibName
{
    return @"Document";
}

- (void)windowControllerDidLoadNib:(NSWindowController *)windowController
{
    [super windowControllerDidLoadNib:windowController];
}

我真的对这种行为感到困惑,我不知道我做错了什么,或者这是不是应该如何。

非常感谢任何形式的帮助

3 个答案:

答案 0 :(得分:0)

只需要调用下面的文档控制器方法来加载nib方法

   NSDocumentController * docC= 
   [[yourDocumentCont alloc]init];
   [docC openDocument:self]

答案 1 :(得分:0)

windowControllerDidLoadNib在需要窗口控制器时被调用。当您单击停靠图标时,它将打开一个新文档,或者创建一个新文档,这是一种系统样式。在后台应用程序不需要窗口,所以我认为没有错。

答案 2 :(得分:0)

仅在

时才在NSDocument子类中调用windowControllerDidLoadNib
  1. windowController所有者是XIB的Document。在XCode中,XIB所有者是NSDocument子类,而不是NSWindowController子类

  2. 覆盖windowControllerDidLoadNib方法

  3. 从NSWindowController的实施:

    ...
    [self windowDidLoad]
    if ([self owner] != self) {
            if ([self respondsToSelector:@selector(windowControllerDidLoadNib:)]) {
                    [[self owner] windowControllerDidLoadNib:self];
            }
    }
    ...
    

    如果您需要此行为,只需将此代码添加到NSWindowController子类

    即可
    - (void)windowDidLoad {
        [super windowDidLoad];
        if ([self owner] == self && [self document]) {
            if ([[self document] respondsToSelector:@selector(windowControllerDidLoadNib:)]) {
                [[self document] windowControllerDidLoadNib:self];
            }
        }
    }