防止 NSDocument 在编辑内容时自动保存

Prevent NSDocument's auto-saving while its content is editing

我开发了一个基于文档的 Cocoa 应用程序允许异步保存文档。即,我的 NSDocument 子类 returns 在 canAsynchronouslyWrite(to:typeOf:for:).

上正常

如果文档内容正在编辑,我想动态地和静默地延迟(或取消)定期自动保存。起初,我认为在 checkAutosavingSafety() 中抛出错误就足够了,但它会为用户显示一个错误消息对话框。

我相信这样的标准需求是有标准方法的。但我不确定在 NSDocument 子类中我应该阻止保存的位置以及我应该说 "please wait".

的方法

有人对此有任何想法吗?

供参考,文档内容为文本,由NSTextView子类管理。

我终于发现用autosavingIsImplicitlyCancellable在保存过程中抛出.userCalcelled错误可以取消自动保存。

/// make autosaving cancellable
override var autosavingIsImplicitlyCancellable: Bool {

    return true
}


/// save or autosave the document contents
override func save(to url: URL, ofType typeName: String, for saveOperation: NSDocument.SaveOperationType, completionHandler: @escaping (Error?) -> Void) {

    // cancel if something is working
    guard saveOperation != .autosaveInPlaceOperation || !self.isEditing else {
        completionHandler(CocoaError(.userCancelled))
        return
    }

    super.save(to: newUrl, ofType: typeName, for: saveOperation, completionHandler: completionHandler)
}


/// whether your document is currently being edited
var isEditing: Bool {

    // check your document state
}