Я создаю приложение, в котором мне нужно сохранить некоторые данные в CloudKit. Я пишу два типа записей: цели и статистика. Цель имеет ссылку на статистику. Мне нужно сохранить данные в оба этих типа.
func ModifyRecordstoCloudKit(recordsToAdd: [CKRecord]?, recordsToDelete: [CKRecord]?, completion: @escaping (Error?) -> Void) {
var recordIDToDelete: [CKRecord.ID]?
if let recordsToDelete = recordsToDelete {
for record in recordsToDelete {
let id = record.recordID
recordIDToDelete?.append(id)
}
}
let opertion = CKModifyRecordsOperation(recordsToSave: recordsToAdd, recordIDsToDelete: recordIDToDelete)
opertion.modifyRecordsCompletionBlock = {_, _, error in
if let error = error {
completion(error)
}
completion(nil)
opertion.qualityOfService = .utility
let privateDatabase = CKContainer(identifier: "something").privateCloudDatabase
privateDatabase.add(opertion)
}
}
Мой вопрос, почему это не работает. Он не обновляется ни на панели инструментов CloudKit, ни когда я пытаюсь получить данные. Запись / записи, которые я имею в качестве входных данных, уже имеют свою соответствующую зону, а также свои данные. Вот как я записываю запись:
func createRecord(recordType: String, zoneID: CKRecordZone.ID, data: [String: String], completion: @escaping (CKRecord?) -> Void) {
let record = CKRecord(recordType: recordType, zoneID: zoneID)
for (arg1, arg2) in data {
record.setObject(arg1 as __CKRecordObjCValue, forKey: arg2)
}
completion(record)
}
Я сделал эти типы записей не на панели инструментов cloudKit, а просто по коду.
Еще один вопрос: как мне получить все записи в зоне, и этот метод ниже правильного?
func getRecord(recordType: String, zoneID: CKRecordZone.ID, completion: @escaping (CKRecord?, Error?) -> Void) {
let recordID = CKRecord(recordType: recordType, zoneID: zoneID).recordID
let operation = CKFetchRecordsOperation(recordIDs: [recordID])
operation.fetchRecordsCompletionBlock = { records, error in
if let error = error {
completion(nil, error)
}
if let requestedRecords = records?[recordID] {
completion(requestedRecords, nil)
}
operation.qualityOfService = .utility
let privateDatabase = CKContainer(identifier: "something").privateCloudDatabase
privateDatabase.add(operation)
}
}
Правильны ли эти фрагменты кода?
Большое спасибо!