ios core-data filter nspredicate

ios - NSPredicar con clave dinámica y valor



core-data filter (2)

Para sustituir una clave en la cadena de predicado, debe usar %K , no %@ :

[NSPredicate predicateWithFormat:@"%K == %@", key, value];

Desde la documentación de la sintaxis de cadena de formato de predicado :

  • % @ es una sustitución var arg para un valor de objeto, a menudo una cadena, número o fecha.
  • % K es una sustitución var arg para una ruta clave.

Intento crear una función que busque en mi pila de datos básicos y devuelva la cantidad de mensajes para una clave / valor deseado.

Aquí está mi código:

NSFetchRequest *messagesCountRequest = [NSFetchRequest fetchRequestWithEntityName:@"Message"]; NSEntityDescription *messageCountModel = [NSEntityDescription entityForName:@"Message" inManagedObjectContext:_mainManagedObjectContext]; [messagesCountRequest setEntity:messageCountModel]; NSPredicate *messageCountPredicate = [NSPredicate predicateWithFormat:@"%@ == %@", key, value]; [messagesCountRequest setPredicate:messageCountPredicate]; count = (int)[_mainManagedObjectContext countForFetchRequest:messagesCountRequest error:nil];

El problema es que devuelve 0 cada vez. He localizado el origen del problema. Cuando tienes una clave estática, el predicado se ve así.

key == "value"

Cuando paso por una clave dinámica, parece que esto

"key" == "value"

Entonces, el problema parece ser el primer conjunto de comillas dobles alrededor de la clave que se coloca al pasar un NSString al predicado. ¿Cómo arreglaría esto?

EDITAR: Para mayor claridad, necesito que sea como el primer caso, ese es el que funciona.


let predicate = NSPredicate(format: "SELF[%@] CONTAINS %@",key,value)

Esto funcionó para mí