3

同時に開くドキュメントの数を制限したい NSDocument ベースのアプリがあります (Lite バージョンの場合)。n 個のドキュメントが必要なだけで、ユーザーがn 個以上を開こうとすると、アプリの完全ダウンロードへのリンクを含むメッセージが表示されます。

NSDocumentController を使用してドキュメントの数を数えることができ、readFromFileWrapper 内で FALSE を返すことができます。これにより、新しいドキュメントを開くことができなくなりますが、標準のエラー メッセージが表示されます。それを避ける方法がわかりません。ペン先から新しいウィンドウを開きたいです。

readFromFileWrapper から FALSE を返すときに NSDocument が標準エラー メッセージを表示するのを防ぐ方法はありますか? または、 readFromFileWrapper が呼び出される前にドキュメントが開かないようにする他の方法はありますか?

4

1 に答える 1

5

init新しいドキュメントを作成するときと、保存されたドキュメントを開くときの両方で呼び出されるメソッドを試してください。制限に達した場合は、単純に nil を返します。ただし、これを試していないため、同じエラーが表示される可能性があります。

- (id)init {
    if([[NSDocumentController documents] count] >= DOCUMENT_LIMIT) {
        [self release];
        return nil;
    }
    ...
}

同じエラーが表示される場合は、カスタム NSDocumentController を使用できます。あなたの実装は、開いているドキュメントの数をチェックし、制限でメッセージを表示し、それ以外の場合は通常の実装を呼び出します。

- (id)openUntitledDocumentAndDisplay:(BOOL)displayDocument error:(NSError **)outError {
    if([[self documents] count] >= DOCUMENT_LIMIT) {
        // fill outError
        return nil;
    }
    return [super openUntitledDocumentAndDisplay:displayDocument error:outError];
}
- (id)openDocumentWithContentsOfURL:(NSURL *)absoluteURL display:(BOOL)displayDocument error:(NSError **)outError {
    NSDocument *doc = [self documentForURL:absoluteURL];
    if(doc) { // already open, just show it
        [doc showWindows];
        return doc;
    }
    if([[self documents] count] >= DOCUMENT_LIMIT) {
        // fill outError
        return nil;
    }
    return [super openDocumentWithContentsOfURL:absoluteURL display:displayDocument];
}
于 2011-03-31T22:16:40.157 に答える