как запросить всю базу данных Realm для определенных данных, а не только из определенного поля или атрибута - PullRequest
0 голосов
/ 12 января 2019

У меня есть база данных областей с таблицей из 5 полей. Поля: "clientName", "случаи", "место", "время" и "дата". На дисплее в uitableview я смогу отобразить все данные в соответствии с clientName, используя:

 allEvent = realm.objects(AllEventClass.self).sorted(byKeyPath: "clientName", ascending: true)

Теперь я хочу настроить UISearchBar с функцией поиска по всей базе данных независимо от полей. Независимо от того, какие данные из какого-либо поля, введенного пользователем в панель поиска, в табличном представлении будет показан результат в clientName, который связан с введенными искомыми данными. Сейчас я могу искать в базе данных только с помощью поля clientName, и результатом, конечно, будет clientName. Например, было бы проблемой, если бы я только запомнил «дату», но не смог вспомнить clientName, связанный с этой «датой». Я хочу иметь возможность вводить «дату» или любые данные из любых других полей и по-прежнему получать результат clientName, связанный с ним. Пока это единственный доступный мне код.

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
    allEvent = AllEventClasses?.filter("clientName CONTAINS[cd] %@", searchBar.text!).sorted(byKeyPath: "clientName", ascending: true)


    tableView.reloadData()
}

Большое спасибо заранее.

1 Ответ

0 голосов
/ 12 января 2019

Возможно, вопрос задает один из нескольких вопросов. Позвольте мне обратиться ко второму. Для ясности база данных области будет содержать объекты, и эти объекты будут иметь свойства (поля). Таким образом, на самом деле нет таблицы с полями (поскольку она немного общая), поэтому любые запросы будут выполняться к этим объектам и их свойствам.

Возможно, вы спрашиваете, как сделать запрос по всем объектам в вашей базе данных одновременно.

Realm Result - это однородный тип коллекции, поэтому вы не можете хранить разные подклассы Object в одном и том же объекте Results - это означает, что вы не можете выполнить запрос по нескольким объектам и вернуть результаты в один объект Result. Одно простое решение - запросить каждый тип объекта.

Тем не менее, я думаю, что ваш реальный вопрос заключается в том, как сделать запрос к нескольким свойствам внутри объекта. Итак, если ваш объект выглядит так

class AllEventClass: Object {
    @objc dynamic var clientName = ""
    @objc dynamic var occassions = ""
    @objc dynamic var venue = ""
    @objc dynamic var time = ""
    @objc dynamic var date = ""
}

и предположим, что вы хотите запросить любые совпадения в свойствах clientName, случая и даты.

let search = stringFromSearchBar
let eventResults = realm.objects(AllEventClass.self).filter("clientName contains[cd] %@ or date contains[cd] %@ or occassions contains[cd] %@", search, search, search)

дайте мне знать, если вы спросили что-то еще, и я обновлю ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...