0

我有一个加载项目的菜单栏(如下)。单击时,我想打开一个新文档,就像从“文件”菜单中打开它一样。我正在使用NSDocumentControllerand newDocument:,但我什么也没得到 - 没有错误。

我收到“无法创建文档”错误,但我通过添加新的文档类型解决了这个问题……如果这与它有关的话。知道为什么我的文档没有打开吗?

更新如下,NSLog我可以看到文档已创建,但我看不到它!

+ (void)buildMenuWithNotifs {
    NSMenuItem* newNoteItem;
    newNoteItem = [[NSMenuItem alloc] initWithTitle:@"New Note" action:@selector(newNote) keyEquivalent:@""];
    [newNoteItem setTarget:[self class]];
    [sm addItem:newNoteItem];
}

+(void)newNote {
    [NSApp activateIgnoringOtherApps:YES];  //app is running as agent
    NSDocumentController *dc = [NSDocumentController sharedDocumentController];
    [dc newDocument:nil];
    NSLog(@"dc: %@", dc);
}

更新 3:

使用此代码,我得到用 NSLog 打印的“无错误”。我从 Document 调用的 NSLoginit 调用,但windowControllerDidLoadNib仍然没有。

KBDocument *d = [[KBDocument alloc] init];
if (![NSBundle loadNibNamed:@"KBDocument" owner:d]) {
    NSLog(@"error");
} else {
    NSLog(@"no error");
}
4

2 回答 2

2

我终于知道问题出在哪里 - 在我的 .plist 中,我最初删除了 Document types 键,因为我不需要它。当我重新创建它时,它默认为 NSDocument 类。我不得不将该键值更改为我自己的子类名称。

于 2013-03-16T17:23:50.273 回答
1

这里有一些代码可以帮助你解决这个问题:

NSError *error = nil;
KBDocument *document = [dc openUntitledDocumentAndDisplay:YES error:&error];
NSLog(@"document: %@ error: %@", document, error);

我还建议添加 NSLog-[KBDocument init]-[KBDocument windowControllerDidLoadNib:]找出是否被调用。

于 2013-03-12T04:50:57.513 回答