Это похоже на ошибку в реализации filter
в Realm.Если вы предоставите один и тот же предикат для NSArray
, содержащего те же Объекты, они вернут правильные результаты.
class Person: Object {
@objc dynamic var name:String = ""
}
let people = stringsWithAccents.map{Person(value: ["name":$0])}
try realm.write {
realm.add(people)
}
let namePredicate = NSPredicate(format: "name CONTAINS[c] %@", searchString)
let foundPeople = realm.objects(Person.self).filter(namePredicate)
print(foundPeople) // Results<Person> <0x7fec74c13060> ( [0] Person { name = á; })
print((people as NSArray).filtered(using: namePredicate)) // [Person { name = á;},Personn { name = Á;}]
Я открыл проблему в RealmCocoa GitHub.
Тем временем, в качестве обходного пути, вы можете вручную проверить версию как в нижнем, так и в верхнем регистре:
let customCaseInsentiveNamePredicate = NSPredicate(format: "name CONTAINS %@ OR name CONTAINS %@", searchString, searchString.uppercased())
print(realm.objects(Person.self).filter(customCaseInsentiveNamePredicate))