Я рекомендую использовать apache или что-то еще вместо обычного сервера rails, но вы, вероятно, можете добавить & amp; в конце и не стесняйтесь покидать
rails server &
Вы используете 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
Проблема в том, что вы храните объекты 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 ]как вы можете видеть, мы сохранили дату как объект даты, а затем при фильтрации отфильтровали по объекту даты.
Существуют некоторые предостережения в отношении фильтрации и некоторые исключения, но вы получите общее представление.
Согласно Документам Царства (выделено мной):
Операторы сравнения ==, < =, & lt ;,> =,>,! = И BETWEEN поддерживаются для типов свойств Int, Int8, Int16, Int32, Int64, Float, Double и Date
blockquote>Таким образом, должно работать следующее:
let date = Date() todayEvent = realm.objects(Events.self) .filter("date == %@", date) .sorted(byKeyPath: "venue") // sorted in ascending order by default