【问题标题】:How to read arrays with NSPersistentCloudKitContainer (CloudKit with Core Data)?如何使用 NSPersistentCloudKitContainer(具有核心数据的 CloudKit)读取数组?
【发布时间】:2021-05-11 09:47:27
【问题描述】:

我在 CloudKit 上的核心数据/类型的实体中有 [String] 和 [Int] 属性,它们分别是字符串列表和 Int64 列表。我正在尝试通过 NSPersistentCloudKitContainer (公共服务器)同步它们。所有其他属性都正确同步,但这两个根本不同步。其他的很简单——字符串、日期、Int64/Int。我也想让它们同步。

它们都是可变形的,它们各自的自定义类设置为 [String] 和 [Int]。 codegen 是 Manual/None,所以我可以创建展开的属性以供以后使用。

当我在第一次启动时运行应用程序时,我也会获得 CKRecord 及其数据 - 我的意思是我在下载记录信息中的调试中看到了它们的值。但是,当我检查 Core Data 时,它告诉我 nil。

我尝试设置 NSSecureUnarchiveFromData 和 NSSecureUnarchiveFromDataTransformerName,但没有成功。

我很清楚数组的数据是下载的,我不明白为什么 Core Data 不喜欢数组。

【问题讨论】:

标签: ios swift core-data cloudkit nspersistentcloudkitcontainer


【解决方案1】:

好的,已经解决了:

  1. 它不能是 CloudKit 上的任何类型的列表,而是字节。

  2. 剩下的只是在上传时将数组转换为 NSData。我用数据做到了

    让 archivedString = 试试? NSKeyedArchiver.archivedData(withRootObject: [String], requiresSecureCoding: true)

[Int] 也是如此。

【讨论】:

  • 您能详细说明您是如何解决这个问题的吗?我也有类似的情况。我的核心数据实体有一个 [String] 类型的属性(可转换),它在 CloudKit 中保存为 Bytes 类型。当我对 CKRecord 发出提取请求并尝试从字节中提取 [String] 时,它会引发错误:strings = record["CD_strings"] as! [String] 你应该如何将 CKRecordValue 设为 [String] 类型?
  • 我认为你不应该在获取时将它的大小写为 [String],而是作为 Data 然后尝试取消归档它。
猜你喜欢
  • 2020-02-28
  • 2021-02-07
  • 2015-04-09
  • 1970-01-01
  • 2021-02-23
  • 2019-11-08
  • 2020-06-07
  • 1970-01-01
  • 2020-03-27
相关资源
最近更新 更多