Избегание конфликтующих сохранений при использовании ссылки (списка) в CloudKit - PullRequest
0 голосов
/ 20 февраля 2020

Я использую CloudKit в качестве хранилища данных и у меня есть классы и студенты. В настоящее время у меня есть Ссылка (Список) в каждом классе, в которой есть ссылка на каждого ученика. И затем на каждого ученика у меня есть обратная ссылка на класс. Легко, и все работает.

Меня беспокоит то, что способ обновления списка учеников в классе, когда один ученик присоединяется или уходит (через свои действия в приложении), заключается в получении последнего класса :

CKContainer.default().publicCloudDatabase.fetch(withRecordID: classToUpdate!.id!) { updatedRecord, error in ...

И затем сохранение передачи в новом списке учеников (взять текущего и добавить присоединяющегося или удалить выпускника)

        updatedRecord!.setObject(newStudentList as __CKRecordObjCValue?, forKey: "students")

И затем сохранить запись .. .

        CKContainer.default().publicCloudDatabase.save(updatedRecord!) { savedRecord, error in

Теперь, меня беспокоит то, что если бы у вас были десятки учеников, присоединяющихся / уходящих когда угодно, это похоже на ситуацию, когда вещи могут выйти из-под контроля c и время между получением и сохранением. последний класс может привести к сбоям сохранения (или, что еще хуже, к сохранению с устаревшим списком ... но я думаю, что CK защищает от этого, и сохранение потерпит неудачу).

Итак, я так понимаю либо: 1) создайте метод повтора для вызова функции сохранения (включая получение последнего списка студентов), если сохранение не удалось ИЛИ 2) удалите ссылку на студента в каждом классе. (недостаток = если я хочу посмотреть общее количество учеников, я должен выполнить поиск по всем ученикам, а не просто по числу учеников, на которые есть ссылки из класса).

Мы приветствуем мысли о наилучшем рекомендуемом дизайне (я Я слышал, что двойные ссылки - это путь к go, но до сих пор не продумал сценарий конфликта ios!).

Я получаю из яблочных документов, которые я должен разработать и обработать, за исключением ошибки изящно (https://developer.apple.com/documentation/cloudkit/ckerror/code/serverrecordchanged)

Я думаю, что я ищу какие-либо мысли о том, когда этот подход стоит, а не.

Спасибо!

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