Swift - ошибка при попытке преобразовать список объектов области (уже сохраненных в область) в результаты - PullRequest
0 голосов
/ 11 апреля 2019

У меня возникла проблема при попытке преобразовать List<T> в Results<T> с помощью RealmSwift.У меня есть функция, которая запускает набор результатов через несколько фильтров и возвращает отфильтрованные результаты.Однако один шаг в этом процессе требует некоторых вычислений и не может быть выполнен с применением фильтра NSPredicate.Я, таким образом, создаю список и добавляю результаты в список, которые соответствуют критериям.Поскольку мне нужно вернуть набор результатов, я применяю фильтр «TRUEPREDICATE» к списку.Тем не менее, я получаю аварийное завершение с сообщением об ошибке: «Этот метод можно вызывать только на RLMArray экземплярах, извлеченных из RLMRealm

Я видел эту проблему в списках объектов, которыееще не были добавлены в Realm, но это результаты предыдущего запроса, и, следовательно, определенно уже были сохранены в базе данных.

Мой код выглядит примерно так:

    var results:Results<Object> = resultsOfSomeQuery

    let list = List<Object>()

    for result in results {

        if result.matchesSomeCriteria {

            list.append(result)

        }

    }

    results = list.filter("TRUEPREDICATE")

Если кто-нибудь сможет прояснить, что здесь происходит, это будет с благодарностью.

1 Ответ

1 голос
/ 11 апреля 2019

То, что вы пытаетесь достичь, невозможно.

Поскольку Results является автообновлением, оно может содержать только управляемые объекты из Realm.Вот почему Realm filter может быть вызван только для управляемых коллекций.Вы не можете использовать filter Realm для List, который вы создали вручную, не сохраняя его в Realm.

Если фильтрация, которую вам нужно сделать, не может быть выполнена с использованием NSPredicate s, тогда вам нужно прибегнуть кна использование не обновляемых коллекций.

...