2

我有一个 iOS 应用程序,它实现了 UIDocument 的自定义子类,该子类将文件包装器封装在数据包、存档对象和图像上。我最初将实现转换为 UIDocument 以获得 iCloud 支持,但它太不可靠了,所以我拔出了 iCloud 部分,只使用带有本地存储的 UIDocument。

当用户修改数据时,我将 updateChangeCount: 发送到 UIDocument 实例,它会定期在后台自动保存。我只在应用程序进入后台时关闭文档。我发现在调用 UIDocument 的 contentsForType 方法的自动保存之后,还会调用 loadFromContents。我在逻辑上不理解这一点,它也导致我的界面出现问题。

我认为 loadFromContents 只有在打开文档或在另一台设备上修改了 iCloud 文档时才会被调用。因此,当我的文档在后台自动保存时,它也会重新加载,这会导致 UI 更新,这有时会丢弃尚未保存的正在进行的新工作。我可以忽略 UI 中的重新加载,但我的模型数据与 UI 对象不同仍然存在一些问题。

那么我做错了什么导致这种行为?我希望保存而不是启动 loadFromContents 或了解如何处理该行为。

谢谢!

4

1 回答 1

2

我发现这种行为在某种程度上是由于一些 @synchronized 调用我包装了 contentsForType 和 writeContents: 初始实现的方法,以防止在关闭具有未保存更改的文档时崩溃。我收到两个几乎同时调用 contentsForType 导致错误的访问错误。

我找到了一种更简洁的方法来防止这些崩溃,方法是在关闭文档之前设置 updateChangeCount:UIDocumentChangeCleared。

于 2012-12-13T22:50:44.840 回答