0

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

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

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

文档.m

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

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

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

任何形式的帮助都非常感谢

4

3 回答 3

1

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

于 2015-09-09T08:34:22.067 回答
0

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

   NSDocumentController * docC= 
   [[yourDocumentCont alloc]init];
   [docC openDocument:self]
于 2013-11-06T06:24:50.433 回答
0

windowControllerDidLoadNib 仅在 NSDocument 子类中调用

  1. windowController 的所有者是 XIB 的 Document。在 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];
        }
    }
}
于 2018-01-14T11:40:37.613 回答