example bar ios core-data nspredicate

ios - example - uisearchbar swift 4



NSPredicate: no se puede analizar la cadena de formato (3)

Esta pregunta ya tiene una respuesta aquí:

Estoy intentando escribir un NSPredicate para obtener filas con el valor de my_column con esta cadena " 193e00a75148b4006a451452c618ccec " y obtengo el siguiente 193e00a75148b4006a451452c618ccec .

Aplicación finalizada debido a la excepción no detectada ''NSInvalidArgumentException'', motivo: ''No se puede analizar la cadena de formato "my_column = 193e00a75148b4006a451452c618ccec"''

Mi declaración de predicado

fetchRequest.predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@==/"%@/"",attributeName,itemValue]];

También probé esto

fetchRequest.predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@ == %@",attributeName,itemValue]];

esta

fetchRequest.predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@ = %@",attributeName,itemValue]];

y esto

fetchRequest.predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@=/"%@/"",attributeName,itemValue]];

Por favor ayuda.

Me enteré de esto, cuando estaba tratando con la respuesta de Martin R

fetchRequest.predicate=[NSPredicate predicateWithFormat:@"%@==%@",attributeName,itemValue];

El atributo nombre que paso viene con un '''', así que me quité el nombre de atributo y lo codifiqué, luego funciona bien.


Creo que te has perdido '''' al verificar la igualdad,

ahora intenta,

[NSPredicate predicateWithFormat:@"my_column=''193e00a75148b4006a451452c618ccec''"];


Encierre la cadena en comillas simples:

[NSPredicate predicateWithFormat:@"my_column = ''193e00a75148b4006a451452c618ccec''"]

o mejor , usa sustitución de argumentos:

[NSPredicate predicateWithFormat:@"my_column = %@", @"193e00a75148b4006a451452c618ccec"]

El segundo método evita problemas si la cadena de búsqueda contiene caracteres especiales como '' o " .

Observación: nunca use stringWithFormat al crear predicados. stringWithFormat y predicateWithFormat manejan el formato %K y %@ diferente, por lo que la combinación de estos dos métodos es muy propensa a errores (e innecesaria).


Tratar

//Case Insensitive fetchRequest.predicate=[NSPredicate predicateWithFormat:@"%K = [cd] %@",attributeName,itemValue]; //Case sensitive fetchRequest.predicate=[NSPredicate predicateWithFormat:@"%K = %@",attributeName,itemValue];