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

问题描述 投票:0回答:1

根据此处的Apple文档

https://developer.apple.com/documentation/coredata/mirroring_a_core_data_store_with_cloudkit/reading_cloudkit_records_for_core_data

您可以使用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。怎么做?

swift core-data nsfetchedresultscontroller cloudkit
1个回答
0
投票
使用带有RecordID的读取(如下)将使您获得最新记录:

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

© www.soinside.com 2019 - 2024. All rights reserved.