我的应用程序正在使用Realm数据库存储许多项目。使用SearchBar,我搜索(不区分大小写)一个可能已经存储在数据库中的项目(如果没有,则将其添加)。项目名称通常包含瑞典语字符之一,而我的问题是,当搜索瑞典语字符(å,ä或ö)时,过滤器也会通过“ a”或“ o”,即搜索“ä”结果在a / A,å/Å和ä/Ä中。
case R.id.showspinner:
spinnershow();
ArrayList<Favoritos> secciones=
new ArrayList<Favoritos>();
try {
objcon = new mysql(this, null, null, 1);
SQLiteDatabase db = objcon.getReadableDatabase();
Cursor rs = db.rawQuery("select * from Favoritos order by
nombre ", null);
Favoritos obj;
while(rs.moveToNext()){
obj=new Favoritos();
obj.setNombre(rs.getString(0));
obj.setUrl(rs.getString(1));
secciones.add(obj);
}
} catch (Exception e) {
// TODO: handle exception
}
ArrayAdapter<Favoritos> adaptador=
new ArrayAdapter<Favoritos>(this,
R.layout.spinner_item,
secciones);
spinner.setAdapter(adaptador);
答案 0 :(得分:0)
这似乎是Realm的filter
实现中的错误。如果为包含相同对象的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上opened an issue。
与此同时,您可以手动检查小写和大写版本:
let customCaseInsentiveNamePredicate = NSPredicate(format: "name CONTAINS %@ OR name CONTAINS %@", searchString, searchString.uppercased())
print(realm.objects(Person.self).filter(customCaseInsentiveNamePredicate))