Результаты Realm сортировка по обратному вызову

У меня есть функция» importData», которая захватывает кучу JSON из API и засовывает его в базу данных области. Часть этого json выглядит как:

files: [
  300,
  19,
  102
]

Номера относятся к id в порядке частей JSON, которые я уже обработал / импортировал до их получения, и в основном это просто список файлов, которые принадлежат к группе.

Это моделируется как so в my Realm Object:

class SomeGroup : Object {
    let files = List<File>()
}

Мне нужно сохранить порядок сортировки этих идентификаторов, чтобы, когда я связываю отношения файлов, файлы были в правильном порядке.

Для того, чтобы захватить файловые модели, которые мне нужно связать, я выполняю запрос следующим образом:

let thefiles = realm.objects(File.self).filter("id IN %@", fileIds)

проблема в том, что это возвращает их в другом порядке, и .sortedметод может только Сортировать по атрибутам модели (из того, что я могу сказать из документов).

Я рассматривал возможность циклического просмотра результатов и превращения их из Result<File>типа в базовый Array<File>или List<File>тип, чтобы я мог сортировать их сам, однако это потеряет информацию указателя области, и поэтому я ожидал бы, что область не сможет создать ссылку.

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

Может ли кто-то посоветовать мне лучший способ заказать Result<File>тип с помощью пользовательской функции/обратного вызова, чтобы он соответствовал моему массиву идентификаторов из json?

1 ответ

  1. Для поддержания порядка набора объектов в области рекомендуется просто хранить их в Listобъекте. Если вы можете настроить логику для доступа к filesсвойству в SomeGroup, это кажется лучшим подходом.

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

    class FileList : Object {
        let files = List<File>()
    }