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 回答