Я использую 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)
Я думаю, что я ищу какие-либо мысли о том, когда этот подход стоит, а не.
Спасибо!