Swift 如何从NSPersistentCloudKitContainer获取CKRecord的新副本?

Swift 如何从NSPersistentCloudKitContainer获取CKRecord的新副本?,swift,core-data,nsfetchedresultscontroller,cloudkit,Swift,Core Data,Nsfetchedresultscontroller,Cloudkit,根据这里的苹果文档 您可以使用NSPersistentCloudKitContainer从NSManagedObject获取CKRecord 访问CloudKit对象 您可以通过关联的上下文直接访问托管对象的CKRecord,对单个记录使用record(for:),对多个记录使用records(for:)。要仅检索记录ID,请使用recordID(用于:)或recordID(用于:)。 或者,在NSPersistentCloudKitContainer上使用类函数record(for:)、re

根据这里的苹果文档

您可以使用NSPersistentCloudKitContainer从NSManagedObject获取CKRecord

访问CloudKit对象 您可以通过关联的上下文直接访问托管对象的CKRecord,对单个记录使用record(for:),对多个记录使用records(for:)。要仅检索记录ID,请使用recordID(用于:)或recordID(用于:)。 或者,在NSPersistentCloudKitContainer上使用类函数record(for:)、records(for:)、recordID(for:)和recordID(for:)

但它没有说明如何获得新的副本?如果您正在使用CloudKit共享,那么您正在修改CK,而无需通过CoreData。在这种情况下,您必须等待NSPersistentCloudKitContainer下一次获取更新


但如果您想显示最新的共享状态,则需要查询Cloudkit。如何做到这一点?

使用RecordID(如下)的fetch可以获取最新记录:

func fetch(withRecordID recordID: CKRecord.ID, 
completionHandler: @escaping (CKRecord?, Error?) -> Void)
如果要获取它,然后更新属性并保存,可以执行以下操作:

从cloudkit获取记录

CKContainer.default().publicCloudDatabase.fetch(withRecordID: user.id!) { updatedRecord, error in
然后为我正在保存的密钥和密钥类型设置新数组(其中,array for user是我已更新的内容,“keyType”是CK记录字段名)

然后进行保存调用,传递更新的记录:

        CKContainer.default().publicCloudDatabase.save(updatedRecord!) { savedRecord, error in
        CKContainer.default().publicCloudDatabase.save(updatedRecord!) { savedRecord, error in