Каков наилучший способ синхронизировать c последовательность с CloudKit? - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь использовать CloudKit для синхронизации c последовательности элементов, которые создает пользователь. Представьте себе список TODO с определенной последовательностью.

Моя первая мысль - возможно, дать каждому TODO свойство position , но я подумал, что это не очень хорошая идея, потому что, когда вы синхронизируете c с нескольких устройств, я не уверен, как CloudKit обрабатывает слияние. И тогда пропущенная или дублирующаяся позиция обязательно взломает sh tableView.

Я подумал, что, возможно, другой способ - сохранить последовательность идентификатора TODO в [String], но реально ли массив будет страдать от тех же проблем слияния?

Что такое лучшая практика?

1 Ответ

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

В одном из моих приложений я применил подход добавления свойства последовательности (свойства позиции, как вы говорите в своем вопросе). Когда я делаю запрос из CloudKit, чтобы получить все элементы, я упорядочиваю по свойству sequence, и затем все отображается в правильном порядке в табличном представлении.

Для редактирования / изменения порядка я использую функцию MoveRowAt (), чтобы позволить пользователю перетаскивать и изменять порядок элементов в таблице (пример ниже).

После перемещения объекта Я запускаю a для каждого l oop, чтобы обновить свойство sequence всех элементов, чтобы отразить новую последовательность.

   override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
    let movedObject = self.headlines[sourceIndexPath.row]
    headlines.remove(at: sourceIndexPath.row)
    headlines.insert(movedObject, at: destinationIndexPath.row)
}

Пример выше из: https://www.ralfebert.de/ios-examples/uikit/uitableviewcontroller/reorderable-cells/

Затем я сохраняю обновленный набор элементов (сначала локально в Core Data в моем приложении, а затем pu sh в CloudKit позже ... но вы можете делать все, что для вас наиболее разумно).

Пропущенная или дублирующая позиция может быть легко обработана при создании таблицы, но если вы превысите oop каждый элемент в событии перемещения, тогда у вас не должно быть этой проблемы в любом случае.

Не уверен, что я следую за проблемой «слияния» - можете уточнить?

...