Swift 将CloudKit RecordID保存到CoreData
我有一个CloudKit记录数组,希望将记录ID存储到核心数据中,这样当我再次查询云时,就不会下拉相同的记录。我只是做了一个NSpRedicate,不包含核心数据中的记录 但是,如果出现错误,如何将记录ID保存到核心数据中。。我认为这是一个典型的问题 当前代码: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总是失败的错误,对此我并不感到惊讶。需要能够保存
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
}