CloudKit - 将CKAsset与包文件

时间:2016-05-04 21:14:35

标签: objective-c cloudkit keynote ckrecord ckasset

我正在尝试使用CKAssets将我的应用程序中的文件存储到CloudKit中。一切正常,使用CKRecord + CKAsset上传和下载工作正常,除了一些文件类型,包括Numbers,Keynote和Pages文档。当我尝试将这些保存到CloudKit时,我收到以下错误:

CKOperationBase error = <CKError 0x12ddeece0: "Partial Failure" (2/1011); "Failed to modify some records"; partial errors: {
  FileAttachments.169DBAC2-8A14-43F0-9F5A-F851E7FF623B:(CJCloudKitPrivateZoneName:__defaultOwner__) = <CKError 0x12f05dcc0: "Invalid Arguments" (12/1017); "Not a regular file">

我的猜测是,这与“包文件”文件有关...即,隐藏在其下方的子目录,您可以在使用“显示包联系人”时看到。

在这种情况下,我应该如何将文件上传到CloudKit?是否有任何API可以检测到这些是“包文件”,还能将它们压缩成可以导出的格式吗?如果我不能在一台设备上上传Keynote文档并通过我自己的应用程序在另一台设备上访问(作为Keynote文档),那将是非常令人失望的。

2 个答案:

答案 0 :(得分:0)

这里没有神奇的解决方案,你必须自己拉链并解压缩包。

答案 1 :(得分:0)

在此处找到解决方案:https://stackoverflow.com/a/36874037/145552

基本上,使用带有NSFileCoordinator选项的NSFileCoordinatorReadingForUploading是关键......如果需要,可以将文件压缩,并且可以将块中的newURL传递给CKAsset并且它可以正常工作正确。在找到此解决方案之前,我正在使用NSFileCoordinatorReadingWithoutChanges