tableviewで検索するときにNSFetchedResultsController
オブジェクトをフィルタリングしようとしています。私はNSPredicate
で試してみましたが、動作させることはできません。
私はこれが私のコードであるスウィフト3.
を使用しています:iOS Swift - 述語コアデータを使用してtableViewをフィルタリングする
func filtrarContenido(searchText: String) {
let buscar = searchText.lowercased()
let nombrePredicate = NSPredicate(format: "nombre_comercial contains[cd] %@", buscar)
let razSocialPredicate = NSPredicate(format: "razon_social contains[cd] %@", buscar)
let predicate = NSCompoundPredicate(type: NSCompoundPredicate.LogicalType.or, subpredicates: [nombrePredicate, razSocialPredicate])
let respuesta = self.funcCoreData.obtenerResultadosFiltrados(entidad: "Clientes", orden: "nombre_comercial", ascendente: true, predicate: predicate)
self.resultadosFiltrados = respuesta[1] as! NSFetchedResultsController<NSManagedObject>
do {
try self.resultadosFiltrados.performFetch()
} catch {
print(" \(error)")
}
}
そして、ここではFuncCoreDataファイル内の関数である、それはNSManagedObject
とNSFetchedResultsController
を持つ配列を返します。
func obtenerResultadosFiltrados(entidad: String, orden: String, ascendente: Bool, predicate: NSPredicate) -> [AnyObject] {
let appDelegate = UIApplication.shared.delegate as? AppDelegate
let context = appDelegate?.persistentContainer.viewContext
let objeto = NSFetchRequest<NSManagedObject>(entityName: entidad)
let ordenacion = NSSortDescriptor(key: orden, ascending: ascendente)
objeto.sortDescriptors = [ordenacion]
objeto.predicate = predicate
print("OBJETO: ", objeto)
let recorrerResultados = NSFetchedResultsController<NSManagedObject>(fetchRequest: objeto, managedObjectContext: context!, sectionNameKeyPath: "seccionLetra", cacheName: nil)
var array = [AnyObject]()
array.append(objeto)
array.append(recorrerResultados)
return array
}
さて、エラーは発生しませんが、検索は常に空です。述語の式が正しくないと思います。 NSPredicate(format: "razon_social contains[cd] %@", buscar)
さらに、私はに鈍感にしたい、これはANY razon_social ..
で達成されますか?