如何使用 NSPersistentCloudKitContainer (CloudKit with Core Data) 读取数组?

问题描述

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

它们都是可转换的,它们各自的自定义类设置为 [String] 和 [Int]。代码生成是手动/无,所以我可以创建解包的属性供以后使用。

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

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

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

解决方法

好的,设法解决了:

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

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

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

[Int] 也是如此。