调用updateChangeCount时,UIDocument自动保存不起作用

时间:2014-09-26 19:01:19

标签: ios uikit uidocument

我有一个UIDocument的自定义子类,用于存储用户的应用内容。我直接致电-[UIDocument updateChangeCount:UIDocumentChangeDone]来跟踪对文档的更改。保存和加载工作正常,但文档永远不会自动保存。为什么会发生这种情况?

2 个答案:

答案 0 :(得分:5)

事实证明问题是我没有从主线程调用-[UIDocument updateChangeCount:]。尽管UIDocument不是UI元素,但它仍然是UIKit的一部分,所以关于始终与主线程中的UIKit类交互的常见警告仍然适用。

将代码包装到主队列中解决了问题:

dispatch_async(dispatch_get_main_queue(), ^{
    [doc updateChangeCount:UIDocumentChangeDone];
});

答案 1 :(得分:1)

首先,更新Jayson对Swift的回答:

DispatchQueue.main.async {
    doc.updateChangeCount(.done)
}

如果仅在一个或两个位置调用它,此方法就很好。但是,如果您有多个调用,并且有可能在后台线程上进行调用,则最好子类UIDocument并重写updateChangeCount(:)函数,以便强制执行主调用。否则,您将有责任每次都进行主呼叫,这使您有可能错过,导致文档进入saveError状态。

然后,您的子类中将具有这样的覆盖:

override func updateChangeCount(_ change: UIDocumentChangeKind) {
    DispatchQueue.main.async {
        super.updateChangeCount(change)
    }
}