objective ios objective-c core-data nspredicate

ios - objective - Predicado CoreData: longitud de propiedad de cadena?



nspredicate objective c (3)

Digamos que si tengo un Fragment entidad, tiene un atributo ''texto'' que es una cadena, quiero consultar la lista de Fragment cuyo text es de longitud 5:

[NSPredicate predicateWithFormat:@"position == %@ AND text.length == %d", pos, 5];

No funciona (es decir, no devuelve ningún resultado), pero si elimino text.length en la consulta, funciona y estoy seguro de que hay textos de longitud 5, entonces, ¿en qué debo cambiarlo?

¡Gracias!


Creo que está tomando text.lengh como una relación. Intenta establecer un predicado solo con posición y luego haz un ciclo buscando text.length == 5.


No hay ningún atributo de longitud para cadenas en NSPredicate . Use regex en su lugar. Su predicado debe verse de la siguiente manera:

[NSPredicate predicateWithFormat:@"position == %@ AND text MATCHES %@", pos, @".{5}"];


No puede usar las funciones de Objective-C como la length en una solicitud de obtención de datos básicos. Pero puede reemplazarlo con el operador "LIKE", que hace una coincidencia de patrón simple:

[NSPredicate predicateWithFormat:@"text LIKE %@", @"?????"];

Un punto interesante es que Core Data no arroja una excepción o regresa con un error, sino que simplemente ignora el método de length , es decir, solo usa el predicado "text = ''5'' lugar. Esto se puede ver activando la salida de depuración de datos del núcleo estableciendo el argumento de lanzamiento

-com.apple.CoreData.SQLDebug 3

(que generalmente es un buen método para localizar problemas de obtención de datos básicos).