问题标签 [ckasset]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
783 浏览

swift - 将 Cloudkit 资产用作 UIimage

我将图像作为资产保存在 CloudKit 中。每条记录还有其他属性。我可以收集记录并使用其他属性,但我无法在我的 ImageView 中使用该资产。我是 Swift 编程的新手,因此我收到的错误没有任何意义。

我得到的错误是在这一行:

它说:

我试图从主线程中删除它,但我收到了同样的错误。

0 投票
1 回答
377 浏览

ios - 将 CloudKit 记录保存到本地文件保存除 CKAsset 之外的所有字段

我正在尝试将一组 CKRecords 保存到文档目录中,以便快速启动和离线访问。

从 CloudKit 下载 CKRecords 工作正常,我可以毫无问题地在每条记录中使用 CKAsset。但是,当我将下载的 CKRecords 数组保存到本地文件时,CKAsset 不包含在数据文件中。我可以从保存到文档目录的文件大小中看出这一点。如果我将磁盘文件重组为 CKRecords 数组,我可以检索除 CKAsset 之外的所有字段。除了系统字段和 CKAsset 字段之外,所有字段都是字符串。

用于测试 - 我有 10 个 CloudKit 记录,每个记录有六个小的字符串字段和一个大约 500KB 的 CKAsset。当我检查文档中生成的文件的大小时,文件大小约为 15KB。

这是保存数组的函数。AppDelegate.ckStyleRecords 是下载的 CKRecords 的静态数组。

这是重构数组的函数。

调用上面的:

刷新使用 ckStyleRecords 数组的 tableView 后,所有数据似乎都是正确的,除了 CKAsset(在本例中是 SceneKit 场景)当然丢失了。

任何指导将不胜感激。

0 投票
1 回答
88 浏览

ios - 如何在 iOS 中将 mp4 文件存储为 Data 或 NSData 对象?

如何在 iOS 中将 mp4 类型的媒体存储为 Data 或 NSData 的对象?我需要这样做作为将 mp4 文件保存为 CloudKit 中的 CKAsset 的一步。

我想做这篇关于堆栈溢出的帖子对图像对象所做的事情,除了我想用 mp4 文件来做。

0 投票
1 回答
643 浏览

video - 将媒体存储到 CloudKit 作为 CKAsset 仅适用于图像,不再适用于视频

我在将视频作为 CKAsset 保存到 CloudKit 时遇到问题。虽然下面的示例代码仅用于保存图像(将 videoSelection 设置为 false),但我过去也可以使用它来将视频存储到 CloudKit。我目前正在使用 XCode 11.3 和 Swift 编程语言以及安装了 iOS 13.2 的模拟器和物理设备。调试器表明在选择具有完整 URL 的视频后,在 func imagePickerController 中正确检索了 Asset 数据。尝试将视频 CKAsset 数据写入 iCloud 时,会生成一条错误消息,包括“连接到名为 com.apple.cloudd 的 pid 0 上的服务”。

我可以通过在 CloudKit 仪表板上验证在执行 SelectImageOrMedia()、imagePickerController() 和 iCloud_WriteRecord( ) 以该顺序。当对视频尝试相同的操作时(使用 videoSelection=true),调试器确实表明 mediaAsset (CKAsset) 已使用完整的 url-path 正确初始化。但是,在代码中使用 iCloud_WriteRecord() 写入视频资产的任何尝试都会在不存储记录的情况下生成以下错误消息:

操作 2676FFA25279B538 出现连接错误:错误域 = NSCocoaErrorDomain 代码 = 4097 “连接到名为 com.apple.cloudd 的 pid 0 上的服务” UserInfo={NSDebugDescription=连接到名为 com.apple.cloudd 的 pid 0 上的服务}

上面描述的技术以前曾经工作过,不仅适用于图像,也适用于视频。

任何解决此问题的帮助将不胜感激!

0 投票
1 回答
235 浏览

swift - 如何在 CloudKit 中存储和检索音频文件?

我正在尝试录制语音消息并将它们作为 CKAssets 存储在 CloudKit 上。我将它们转换为 AVAudioFile 并将它们作为 Post 记录上的几个属性之一保存到 CloudKit。

尽管通过 CloudKit 仪表板访问文件时无法播放音频,但该过程的这一部分似乎有效。(双击它会打开 iTunes,但它不会播放)

我创建了一个 fetchPosts 函数,该函数成功地关闭了与记录相关的图像,但是当我尝试播放音频时,它给了我以下错误:

ExtAudioFile.cpp:192:Open: 即将抛出 -43: 打开音频文件

我相信这与我无法将资产正确转换为 AVAudioFile 有关。它似乎不像转换图像资产那样干净利落。

谁能告诉我哪里出错了?

0 投票
0 回答
21 浏览

cloudkit - 是否保留了 CKAsset 图像元数据?

在我开始实施另一种方法来存储我作为 CKAssets 上传的图像的元数据之前,请确保我没有遗漏任何东西。现在我已经向 CKAsset 添加了一个扩展,如下所示:

但它似乎已经清除了除了一些非常简单的属性(如宽度和高度)之外的所有元数据。

我是否遗漏了什么或者元数据没有与 CKAsset 一起保存?

0 投票
1 回答
184 浏览

ios - 使用 CKAsset 在 CloudKit 中创建记录,但获取时资产始终为零,其他属性正常

我使用 CloudKit 仪表板在 CloudKit 中创建了一条记录。该记录还包含照片的属性,我在保存记录之前上传了该属性。照片数据存储在CKAsset类型的属性中。在实体核心数据日期模型中,它表示为Data类型的属性。

当我稍后在与CloudKit同步的本地 sqlLite DB 上执行NSFetchRequest时,应该保存图像二进制数据的属性始终为零。所有其他属性(只是字符串)都填充了有效数据。当我更改这些属性并再次执行NSFetchRequest时,更改会反映在获取结果中。

我不知道为什么 photo 属性总是 nil 而其他字符串属性包含当前有效值。

编辑 - 提供示例代码。

这是从由 CloudKit 支持的本地 sqlite DB 获取它的代码,其中 photo 属性为nil,即使它在 CloudKit 中提供:

这是 Xcode 生成的实体定义:

扩展 ReceiptEntity {

}

如前所述:当我使用以下代码直接从 CloudKit 获取某个记录时 - photo 属性有一个 CKAsset 实例并且照片在那里:

0 投票
1 回答
81 浏览

json - 使用 CKAsset 存储 API JSON 并每 6 小时更新一次

我正在使用 Swift/Xcode 构建一个本机 iOS 应用程序,该应用程序利用来自 3rd 方 API 的 JOSN 数据。一切正常,但 API 限制了您每小时可以调用 API 的次数。所以现在我正在构建一个函数,旨在创建一个每周数据库作为 CloudKit 中的 CK 资产,它将每 6 小时从 API 更新 JSON。这样,数据仍然是相对最新的,但也将 API 调用次数减少到每天仅 4 次。

注意:该应用程序正在 Production/TestFlight 中进行测试。

该函数在创建新的 CKAsset 以在 CloudKit 中另存为新的 CKRecord 时正常工作。该函数还正确地从 CloudKit 下载和解码 CKAsset 以在应用程序中使用。<- 任何人都可以下载此资产,并且运行良好。

问题:每当函数检查 CKAsset 是否超过 6 小时时,它应该让任何用户通过下载更新的 JSON 文件并使用 CKModifyRecordsOperation 将其替换到 CKRecord 的 CKAsset 中来修改 CKRecord。问题是,每当另一个用户尝试修改记录时,应用程序就会崩溃。

问题:为什么其他使用TestFlight的用户不能修改记录?使用 CKModifyRecordsOperation 我错了吗?

非常感谢任何帮助或建议!

-------------------------------------------代码/功能---- ----------------

}