我有一个 iOS 应用程序,它实现了 UIDocument 的自定义子类,该子类将文件包装器封装在数据、存档对象和图像包上。我最初将实现转换为 UIDocument 以支持 iCloud,但它太不可靠,因此我取出 iCloud 部分,只使用具有本地存储的 UIDocument。
当用户修改数据时,我将 updateChangeCount: 发送到 UIDocument 实例,并定期在后台自动保存。我仅在应用程序转到后台时关闭文档。我发现在调用 UIDocument 的 contentForType 方法的自动保存后,还会调用 loadFromContents 。我从逻辑上不理解这一点,它也导致我的界面出现问题。
我认为只有在打开文档或在其他设备上修改 iCloud 文档时才会调用 loadFromContents。因此,当我的文档在后台自动保存时,它也会重新加载,这会导致 UI 更新,有时会丢弃尚未保存的正在进行的新工作。我可以忽略 UI 中的重新加载,但由于模型数据与 UI 对象不同,我仍然会遇到一些问题。
那么我做错了什么导致这种行为呢?我希望保存时不启动 loadFromContents 或了解如何处理该行为。
谢谢!
最佳答案
我发现这种行为在某种程度上是由于我在初始实现中包装了contentsForType和writeContents:方法的一些@synchronized调用所致,以防止在关闭未保存更改的文档时发生崩溃。我几乎同时收到两个对contentsForType 的调用,这导致了错误的访问错误。
我找到了一种更简洁的方法来防止这些崩溃,方法是在关闭文档之前设置 updateChangeCount:UIDocumentChangeCleared。
关于iphone - 为什么在自动保存 UIDocument 后调用 loadFromContents?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13869336/