iCloud与核心数据和文件同步

3
我正在开发一个使用Core Data和iCloud(通过iOS7的巨大改进)的应用程序。这个应用程序存储了以下描述任务信息的数据:
  • nameNSString类型
  • dateNSDate类型
  • image为一个NSString,它描述了图片的路径。
  • 这些图片可以存储在文档或库目录中(我必须决定哪个文件夹更方便),同样,它们将与唯一名称在同一文件夹中。
    现在我想为图片激活iCloud同步,否则用户的体验将不完整(我只同步DB数据...没有图片,这对于一个应用来说是奇怪/错误的行为)。
    苹果的文档真让我困惑。我找不到一种理解iCloud数据如何满足这种需求的方法。我只想在创建文件时立即同步文件夹中的每个文件。所以我的问题是:
  • 您能分享一些学习如何使用iCloud进行文件同步的好资源吗?
  • 我需要使用UIDocument和其他iCloud API吗?还是有什么“自动”的东西。相当新的/愚蠢的问题,我知道:(
  • 在同一个应用程序中使用核心数据和基于文档的iCloud同步是否会有任何问题?
  • 注意:我知道我可以通过添加文档文件并希望用户激活文档同步来同步数据...但这显然不是我想要的。
    2个回答

    6
    使用Core Data事务日志同步和基于文件的同步在同一个应用程序中实现您想要实现的目标非常简单。因此,您需要设置Core Data堆栈以使用iCloud选项并通过iCloud同步数据更改。同时,您还需要将图像存储在应用程序的iCloud容器中,以便它们也可以进行同步。请记住,在Core Data fileURL中,您需要使用相对引用来引用图像,因为完整路径名将因设备而异。例如,您只需在Core Data中存储图像文件名,并使用标准目录(例如“iCloudContainer/Documents/Images/”)来存储它们。“iCloudContainer”是通过调用[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:] API获取的URL。
    我已经上传了使用iCloud进行事务日志同步(即在Core Data中同步数据)和使用文件同步进行存储Core Data备份文件的示例Core Data应用程序,这些文件可以由任何设备访问。您应该能够使用相同的代码将备份文件移动到和从iCloud中,以用于您的图像。请记住,在使用它们之前,您必须触发从iCloud下载文件,方法是执行协调读取或使用NSFileManager初始化下载。

    http://ossh.com.au/design-and-technology/software-development/sample-library-style-ios-core-data-app-with-icloud-integration/

    http://ossh.com.au/design-and-technology/software-development/sample-library-style-ios-core-data-app-with-icloud-integration/sample-apps-explanations/

    下载并运行示例应用程序,并使用内置的备份文件管理器创建备份文件,并使用不同设备将它们复制到iCloud中,然后在存储图像文件时只需使用相同的代码。

    您的应用程序必须处理诸如用户更改iCloud帐户、登录或注销iCloud等事情,并相应地移动核心数据文件和图像文件。


    2
    唯一能够自动完成此操作的方法是在模型中创建一个二进制数据属性来存储图像。如果这样做,您可能需要检查允许外部二进制存储选项,以便照片最终存储为文件而不是数据库中的数据。
    如果您想将照片存储在商店之外,则需要进行更多的工作。例如,您需要使用NSFileManager方法将照片迁移到iCloud容器中。您也可以使用类似于iCloud Access的类,如果您觉得更容易的话。
    自己处理照片的缺点是,您永远无法确定它们何时全部到达设备,因此即使商店中有它们的条目,也可能缺少一个或多个照片。您必须确保您的应用程序可以处理这种情况,例如显示占位符图像,直到真正的照片可用为止。
    在一个应用程序中使用Core Data和文档同步没有任何问题。实际上,在底层它们完全相同。从iCloud的角度来看,它们都只是要传输的文件。

    照片已经被调整大小并且非常小(小于200kb)。将它们直接保存到数据库中是否是一个好主意(也许可以检查外部二进制存储模式)?我的意思是,这个选项不会因为较大的大小而在iCloud同步时出现问题,而不是“正常”的数据插入/更新查询吗? - MatterGoal
    1
    另外一个问题...如果图像是通过setAllowsExternalBinaryDataStorage存储在外部,你确定iCloud会管理它们吗?(顺便说一下,非常好的答案!你给了我很多细节) - MatterGoal
    1
    Core Data的setAllowsExternalBinaryDataStorage不会将外部文件与iCloud同步 - 因此您无法使用它。 - Duncan Groenewald
    2
    什么?认真的吗?我非常确定那不正确。我在我的应用程序中使用了几个月,而iCloud正在同步外部二进制文件。你有一个链接可以证明吗? - Drew McCormack
    iCloud Access在iOS 10上仍然是最新的吗? - SAHM
    显示剩余2条评论

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接