【问题标题】:windowControllerDidLoadNib is not getting called in OSX app在 OSX 应用程序中未调用 windowControllerDidLoadNib
【发布时间】:2018-01-14 19:46:33
【问题描述】:

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

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

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

文档.m

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

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

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

非常感谢任何形式的帮助

【问题讨论】:

  • 在您的应用委托中显示代码

标签: objective-c macos cocoa


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • NSDocument 没有 windowDidLoad...我不太明白你在提议什么
    • 哦,那么无论您在哪里初始化了文档控制器,都需要调用这些方法 openDocument
    【解决方案3】:

    windowControllerDidLoadNib 仅在 NSDocument 子类中调用

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

    2. 你重写 windowControllerDidLoadNib 方法

    来自 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];
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-21
      相关资源
      最近更新 更多