如何将核心数据与引用文件同步?

时间:2013-02-21 06:34:43

标签: iphone objective-c core-data icloud

刚开始阅读各种帖子,了解如何使用iCloud同步文件或核心数据。我目前正在开发的应用程序将核心数据和文件名中的数据存储为对文档应用程序沙箱中存储的图像文件的引用。因此,每当用户在数据库中创建记录时,也会在文档dir中创建相关文件(照片)。

如果我们需要同步文件或核心数据,一切看起来都不错,但我正在寻找一种如何同步核心数据和文件的方法。因此,如果新的核心数据记录比这些记录的图像文件更早到达,我会担心这种情况。在这种情况下,数据完整性将被打破。实际上,我希望所有新的相关文件首先出现,然后是所有核心数据更新。有可能吗?

1 个答案:

答案 0 :(得分:2)

不是,不。您将数据发送到云,但无法控制它何时出现在其他设备上。无论外部文件的状态如何,iCloud都会随时调用托管对象。实现这一目标的唯一方法是查找和下载任何外部文件,等待下载完成,然后才启动核心数据堆栈。但这意味着在下载完成之前将用户锁定在数据存储之外,这不是一个好主意。

当我遇到类似情况时,我这样处理:

  • 启动所有外部文件的下载并启动Core Data堆栈。
  • 修改图像的getter方法,以检查文件是否存在并已下载。
    • 如果两者都同意,则正常进行
    • 如果不是,则显示“loading ...”UI元素。这可能是一个微调器或进度指示器。听取自定义的“下载完成”通知。
  • 每当外部文件完成下载时,发布“下载完成”通知。重新检查文件,如果已准备就绪,请将“loading ...”UI替换为图像。