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).