Заданный пользователем порядок сортировки в Firebase

#ios #sorting #firebase #transactions #firebase-realtime-database

#iOS #сортировка #firebase #транзакции #firebase-база данных в реальном времени

Вопрос:

В приложении для iOS я хотел бы предоставить пользователю возможность изменять порядок сортировки элементов в таблице (перетаскивая строку и помещая ее в новое местоположение).

Я структурировал данные в Firebase следующим образом:

 {
  "items": {
    "id1": {
      "title": "A",
      "sortOrder": 2
    },
    "id2": {
      "title": "B",
      "sortOrder": 1
    },
    "id3": …
  }
}
  

С помощью queryOrderedByChild(«Сортировщик») Я получаю элементы в правильном порядке B, A, …

Однако обновить данные после того, как пользователь изменил порядок сортировки, не так просто:

  • Допустим, пользователь переключает A и B, тогда сортировщик A и B должен быть изменен «одновременно» в транзакции. Более того, если, скажем, F перемещается перед A, все промежуточные элементы должны быть скорректированы на 1.
  • Если добавляется новый элемент, мы должны убедиться, что он получает следующий самый высокий порядок сортировки, поэтому, я думаю, нам нужно будет определить самый высокий порядок сортировки, добавить элемент с помощью SortOrder 1 . Если тем временем был добавлен другой элемент с таким порядком сортировки, мы должны отклонить первую попытку, повторить попытку с 2, 3 и т.д..

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

Комментарии:

1. Вы пробовали добавлять список в indexPath.row и обновлять свою базу данных, когда она изменяется для определенной строки /? Не проверял, а просто подумал …:)

2. Спасибо! Что я делаю сейчас: после того, как пользователь переместил строку, я соответствующим образом переупорядочиваю элементы в модели (обычный массив). Затем я использую массив для одновременного обновления всех элементов в Firebase с помощью SortOrder = index в массиве. Работает как шарм.