Как получить бесплатную sh копию CKRecord из NSPersistentCloudKitContainer? - PullRequest
0 голосов
/ 16 февраля 2020

Согласно документации Apple здесь

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

Вы можете получить CKRecord от NSManagedObject, используя NSPersistentCloudKitContainer.

Доступ Объекты CloudKit Вы можете получить доступ к CKRecord управляемого объекта напрямую через связанный с ним контекст, используя запись (для :) для одной записи или записи (для :) для нескольких записей. Чтобы получить только идентификатор записи, используйте recordID (для :) или recordID (для :). В качестве альтернативы используйте функции класса record (для :), records (для :), recordID (для :) и recordIDs (для :) в NSPersistentCloudKitContainer.

Но здесь не сказано, как получить бесплатную sh копию? Если вы работаете с CloudKit Sharing, вы изменяете CK без использования CoreData. В этом случае вам придется ждать NSPersistentCloudKitContainer для следующей загрузки обновлений.

Но если вы хотите представить последний статус общего доступа, вам нужно запросить Cloudkit. Как это сделать?

1 Ответ

1 голос
/ 25 февраля 2020

Использование выборки с 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
...