ios - sesión - wunderlist webapp
Datos principales: NSPredicate para filtrar una cadena vacía que funciona incorrectamente (2)
Esto es lo que quieres
[NSPredicate predicateWithFormat:@"%K != %@", @"text", @""]
Si también necesita comprobar si no / NULL
haga esto:
[NSPredicate predicateWithFormat:@"%K != NULL && %K != %@", @"text", @"text", @""]
He estado usando datos básicos en mi proyecto por un tiempo. Hace unos días, encuentro que algunos de los registros guardados en la base de datos no aparecen en la interfaz de usuario de la aplicación. Lo localicé y descubrí que no se están recuperando en absoluto cuando filtro una cadena vacía usando NSPredicate. Y todos ellos comienzan con caracteres no alfabéticos.
Para aclarar el problema, creé un proyecto de muestra y agregué algunos datos de muestra a la base de datos. Digamos que son "Muestra", "+ muestra", "Muestra +".
Aquí está el fragmento de código que utilicé para filtrar una cadena vacía. "texto" es el nombre de la propiedad de cadena, y moc es la instancia de NSManagedObjectContext.
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"BasicEntity"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"text.length > 0"];
[request setPredicate:predicate];
NSArray *samples = [moc executeFetchRequest:request error:&error];
La matriz de resultados contiene solo 2 entidades, que son "Muestra" y "Muestra +".
Incluso probé el mismo predicado (por supuesto, usando self.length en lugar de text.length) en una matriz simple que contiene las cadenas de muestra anteriores, y obtengo las 3 correctamente.
Me pregunto si alguien experimentó el mismo problema. ¿O me estoy perdiendo algo al usar Core Data? Probado en iOS 7.0.3 simulador y 7.0.6 iPad Air.
ACTUALIZACIÓN: Como se respondió en otro hilo, resolví este problema usando una expresión regular.
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"text MATCHES %@", @".{1,}"];
Aún así, creo que el predicado original que usé es válido. Voy a presentar un error a Apple para obtener sus opiniones.
Prueba esto:
NSPredicate *predicateName = [NSPredicate predicateWithFormat:@"name!=nil AND name!="""];