Проблема в том, что вы храните объекты 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
Решение состоит в том, что если свойство, по которому вы ищете, является датой, тогда фильтр должен быть объектом даты.
Итак, пример написания объекта даты, который начинается как строка мм / дд / гггг
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")
}
Предположим, что теперь мы хотим найти этот объект со строкой "ггггммдд"
let dateStringToFind = "20190120"
let yyyymmddFormatter = DateFormatter()
yyyymmddFormatter.dateFormat = "yyyyMMdd"
let dateObjectToFind = yyyymmddFormatter.date(from: dateStringToFind)
let results = realm.objects(MyObject.self).filter("date == %@", dateObjectToFind)
if results.count > 0 {
for myObject in results {
print(myObject)
}
} else {
print("no objects have that date")
}
Как видите, мы сохранили дату как объект даты, а затем при фильтрации отфильтровали по объекту даты.
Есть несколько предостережений при фильтрации и некоторые исключения, но вы получите общее представление.