根据此处的Apple文档
您可以使用NSPersistentCloudKitContainer从NSManagedObject获取CKRecord。
访问CloudKit对象您可以使用单个记录的record(for :)或多个记录的records(for :)通过托管对象的关联上下文直接访问其CKRecord。若要仅检索记录ID,请使用recordID(for :)或recordIDs(for :)。或者,在NSPersistentCloudKitContainer上使用类函数record(for :),records(for :),recordID(for :)和recordIDs(for:)。
但是它没有说如何获得新的副本?如果您正在使用CloudKit共享,则无需通过CoreData即可修改CK。在这种情况下,您必须等待NSPersistentCloudKitContainer下一次获取更新。
但是,如果要显示最新的共享状态,则需要查询Cloudkit。怎么做?
func fetch(withRecordID recordID: CKRecord.ID,
completionHandler: @escaping (CKRecord?, Error?) -> Void)
如果要获取它,然后更新属性并保存,则可以执行以下操作:从cloudkit获取记录
CKContainer.default().publicCloudDatabase.fetch(withRecordID: user.id!) { updatedRecord, error in
然后为我要保存的键和键类型设置新数组(其中用户数组是我更新的东西,'keyType'是CK记录字段名称)
updatedRecord!.setObject(arrayForUser as __CKRecordObjCValue?, forKey: keyType)
然后进行保存调用,并传递更新的记录:
CKContainer.default().publicCloudDatabase.save(updatedRecord!) { savedRecord, error in