Objective c OSX应用程序中未调用WindowControllerdLoadNib

Objective c OSX应用程序中未调用WindowControllerdLoadNib,objective-c,macos,cocoa,Objective C,Macos,Cocoa,我注意到我的OSX应用程序(基于文档)有一种奇怪的行为,我觉得我在这里做错了什么 当我从Xcode运行我的应用程序时,它运行得很好,一切正常。 如果我按command+Q退出应用程序,一切正常 当我通过按Xcode中的停止按钮退出应用程序时,应用程序会像正常情况一样停止,但当我下次运行时,我的WindowControllerdLoadNib不会被调用,直到我在dock菜单中单击我的应用程序图标(虽然应用程序正在运行,但我已签入活动监视器) 文件.m - (NSString *)windowNib

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

当我从Xcode运行我的应用程序时,它运行得很好,一切正常。 如果我按command+Q退出应用程序,一切正常

当我通过按Xcode中的停止按钮退出应用程序时,应用程序会像正常情况一样停止,但当我下次运行时,我的WindowControllerdLoadNib不会被调用,直到我在dock菜单中单击我的应用程序图标(虽然应用程序正在运行,但我已签入活动监视器)

文件.m

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

- (void)windowControllerDidLoadNib:(NSWindowController *)windowController
{
    [super windowControllerDidLoadNib:windowController];
}
我真的对这种行为感到困惑,我不知道我做错了什么,也不知道这到底是怎么回事


非常感谢您提供的任何帮助

只要您需要调用下面的documentcontroller方法来加载nib方法

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

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

只有在

  • windowController所有者是XIB的文档。在XCode中,XIB所有者定义为NSDocument子类,而不是NSWindowController子类

  • 您可以重写WindowControllerdLoadNib方法

  • 从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];
            }
        }
    }
    

    在应用程序中显示代码delegateNSDocument没有windowDidLoad…我不太明白你的建议HK那么无论你在哪里初始化documentcontroller,你都需要调用这些方法openDocument