Swift 将CloudKit RecordID保存到CoreData

Swift 将CloudKit RecordID保存到CoreData,swift,core-data,cloudkit,Swift,Core Data,Cloudkit,我有一个CloudKit记录数组,希望将记录ID存储到核心数据中,这样当我再次查询云时,就不会下拉相同的记录。我只是做了一个NSpRedicate,不包含核心数据中的记录 但是,如果出现错误,如何将记录ID保存到核心数据中。。我认为这是一个典型的问题 当前代码: coreData.recordRecordID = self.cloudKitRecords[0].recordID as? String 当前获取CKRecord as String总是失败的错误,对此我并不感到惊讶。需要能够保存

我有一个CloudKit记录数组,希望将记录ID存储到核心数据中,这样当我再次查询云时,就不会下拉相同的记录。我只是做了一个NSpRedicate,不包含核心数据中的记录

但是,如果出现错误,如何将记录ID保存到核心数据中。。我认为这是一个典型的问题

当前代码:

 coreData.recordRecordID = self.cloudKitRecords[0].recordID as? String
当前获取CKRecord as String总是失败的错误,对此我并不感到惊讶。需要能够保存recordID,然后从核心数据获取recordID


谢谢

您可以这样获得id:

coreData.recordRecordID = self.cloudKitRecords[0].recordID.recordName
然后它将是一个字符串。 如果您想从中创建CKRecordID,那么可以使用

var myID = = CKRecordID(recordName: yourStringID)

然后将核心数据属性类型更改为
Transformable
而不是
String

请注意,相同的记录ID可以存在于不同的区域中,因此如果您使用多个区域,如果您需要此标识符真正唯一,则需要包含区域ID。使用此方法而不是Edwin的利弊是什么建议?@flinth Con:None Pro:CKRecordID由recordName('String')和CKRecordZone组成。使用默认区域以外的区域时,务必将“CKRecordZone”与记录名一起保存。即使您现在不使用其他区域,这也将保护您的未来。注意:您可以使用“encodeSystemFieldsWithCoder”(参见文档)仅保存记录的元数据。如果你需要的话,我可以发布代码来使用编码器。
import Foundation

import CoreData

import CloudKit

class Entity: NSManagedObject {

// MARK: - Properties

@NSManaged var recordID: CKRecordID?

// Additional properties here

}