【问题标题】:Prevent Opening new NSDocuments and show a warning message阻止打开新的 NSDocument 并显示警告消息
【发布时间】:2011-04-01 06:16:40
【问题描述】:

我有一个基于 NSDocument 的应用程序,我想在其中限制同时打开的文档数量(对于 Lite 版本)。我只想拥有 n 个文档,如果用户尝试打开的文档超过 n 个,则显示一条消息,其中包含指向完整应用程序下载的链接。

我已经设法使用 NSDocumentController 计算文档的数量,并且在 readFromFileWrapper 中,我可以返回 FALSE。这会阻止新文档打开,但会显示标准错误消息。我不知道如何避免这种情况。我想用笔尖打开一个新窗口。

当从 readFromFileWrapper 返回 FALSE 时,有什么方法可以防止 NSDocument 显示标准错误消息?或者有没有其他方法可以在调用 readFromFileWrapper 之前阻止文档打开?

【问题讨论】:

    标签: cocoa nsdocument


    【解决方案1】:

    尝试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];
    }
    

    【讨论】:

    • 太棒了。你为我指明了正确的方向。我使用了带有 openDocumentWithContentsOfURL 的代码,我可以阻止创建文档。但是当我返回 nil 时,警告信息仍然出现。最后我通过覆盖“presentError”解决了它。如果错误是我的“达到最大文档数”,我会显示我的自定义窗口。否则,我调用 [super presentError] 来显示标准错误消息。非常感谢您的帮助。
    猜你喜欢
    • 2022-01-11
    • 2021-03-25
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 2012-02-06
    相关资源
    最近更新 更多