如何从 NSPersistentCloudKitContainer 获取 CKRecord 的新副本?
Posted
技术标签:
【中文标题】如何从 NSPersistentCloudKitContainer 获取 CKRecord 的新副本?【英文标题】:How to get a fresh copy of CKRecord from NSPersistentCloudKitContainer? 【发布时间】:2020-02-16 02:26:08 【问题描述】:根据此处的 Apple 文档
https://developer.apple.com/documentation/coredata/mirroring_a_core_data_store_with_cloudkit/reading_cloudkit_records_for_core_data
您可以使用 NSPersistentCloudKitContainer 从 NSManagedObject 获取 CKRecord。
访问 CloudKit 对象 您可以通过其关联的上下文直接访问托管对象的 CKRecord,使用 record(for:) 访问单个记录,或使用 records(for:) 访问多个记录。要仅检索记录 ID,请使用 recordID(for:) 或 recordIDs(for:)。 或者,在 NSPersistentCloudKitContainer 上使用类函数 record(for:)、records(for:)、recordID(for:) 和 recordIDs(for:)。
但它没有说明如何获得新副本?如果您正在使用 CloudKit 共享,那么您正在修改 CK 而无需通过 CoreData。在这种情况下,您必须等待 NSPersistentCloudKitContainer 下一次获取更新。
但是如果要呈现最新的分享状态,则需要查询Cloudkit。如何做到这一点?
【问题讨论】:
【参考方案1】:使用带有 RecordID 的 fetch(如下)可以让您获取最新记录:
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
【讨论】:
以上是关于如何从 NSPersistentCloudKitContainer 获取 CKRecord 的新副本?的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数
如何从服务器获取和设置 android 中的 API(从服务器获取 int 值)?如何绑定和实现这个