Как запросить свойство даты в Realm?

Я рекомендую использовать apache или что-то еще вместо обычного сервера rails, но вы, вероятно, можете добавить & amp; в конце и не стесняйтесь покидать

rails server &
0
задан halim 17 January 2019 в 07:46
поделиться

3 ответа

Вы используете Date объект со временем & amp; локаль, поэтому для использования только с датой можно использовать функцию ниже для удаления времени & amp; локаль из объекта даты:

   func reomveTimeFrom(date: Date) -> Date {
            let components = Calendar.current.dateComponents([.year, .month, .day], from: date)
            let date = Calendar.current.date(from: components)
            return date!
        }

Теперь используйте эту функцию для получения объекта точной даты & amp; получить данные из базы данных realm.

let today = self.reomveTimeFrom(date: Date())
let predicate = NSPredicate(format: "date ==  %@",today as NSDate)
let results = realm.objects(Events.self).filter(predicate)

Завершить исходный код на github

0
ответ дан Rocky 17 January 2019 в 07:46
поделиться

Проблема в том, что вы храните объекты Date, но пытаетесь отфильтровать это свойство как строку.

Эта строка

let dateFromString = dateFormatter.date(from: dateString)

создает объект Date () из строки, и это то, что хранится в вашем свойстве Realm.

Объект даты Realm выглядит следующим образом

2019-01-18T05:00:00.000Z

Вот ваш фильтр:

let stringDate = dateFormatter.string(from: date)
todayEvent = realm.objects(Events.self).filter("date = '\(stringDate)'")

Это создает строку из объекта даты, и Realm не будет знать, что делать с этим. Если вы хотите отфильтровать свойство даты, используйте для этого объект даты.

Важно отметить, что эта строка должна завершиться сбоем со следующей ошибкой

Expected object of type date for property 'date' on object of type 'Event', but received: 18 Jan 2019

Решение состоит в том, что если свойство, по которому выполняется поиск, является Date, тогда фильтр должен быть объектом Date.

Итак, пример написания объекта даты, который начинается как строка мм / дд / гггг

let aDateString = "01/20/2019"
let mmddyyyyFormatter = DateFormatter()
mmddyyyyFormatter.dateFormat = "MM/dd/yyyy"
if let dateObjectToStore = mmddyyyyFormatter.date(from: aDateString) {
    newDataEntry.date = dateObjectToStore
} else {
    print("could not create date object")
}

Предположим, что теперь мы хотим найти этот объект со строкой «ггггммдд»

[115 ]

как вы можете видеть, мы сохранили дату как объект даты, а затем при фильтрации отфильтровали по объекту даты.

Существуют некоторые предостережения в отношении фильтрации и некоторые исключения, но вы получите общее представление.

0
ответ дан Jay 17 January 2019 в 07:46
поделиться

Согласно Документам Царства (выделено мной):

Операторы сравнения ==, < =, & lt ;,> =,>,! = И BETWEEN поддерживаются для типов свойств Int, Int8, Int16, Int32, Int64, Float, Double и Date

Таким образом, должно работать следующее:

let date = Date()
todayEvent = realm.objects(Events.self)
    .filter("date == %@", date)
    .sorted(byKeyPath: "venue") // sorted in ascending order by default
0
ответ дан Dan Karbayev 17 January 2019 в 07:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: