0

項目をロードするメニュー バーがあります (以下)。クリックすると、[ファイル] メニューから開くかのように、新しいドキュメントを開きたいです。と を使用NSDocumentControllerして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 で「エラーなし」と出力されます。init ドキュメントから呼び出しているNSLog が呼び出されていますが、まだ呼び出されwindowControllerDidLoadNibていません。

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

2 に答える 2

2

私はついに問題が何であったかを知りました-私の.plistで、私はそれを必要としなかったので最初にドキュメントタイプキーを削除しました。再作成すると、デフォルトで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 に答える