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