无法从菜单栏中打开新文档

时间:2013-03-11 19:46:06

标签: objective-c xcode macos cocoa

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

我收到“无法创建文档”错误,但我通过添加新文档类型解决了这个问题......如果这与它有任何关系。知道我的文件没有打开的原因吗?

已更新下面有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打印“无错误”。 我从文档的init 调用的NSLog被调用,但windowControllerDidLoadNib仍未调用。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

以下是一些可能有助于您排除故障的代码:

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

我还建议在-[KBDocument init]-[KBDocument windowControllerDidLoadNib:]中添加NSLog,以确定是否会调用它们。