Операции в CloudKit по сохранению и чтению записей не работают, даже если ошибки нет? - PullRequest
0 голосов
/ 15 марта 2020

Я создаю приложение, в котором мне нужно сохранить некоторые данные в 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)
    }
}

Правильны ли эти фрагменты кода?

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...