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í