iphone - tipos - ¿Qué significa No se puede generar SQL para el predicado(_STRING PREDICATE_)(problema en RHS)?
sujeto y predicado (2)
Estoy tratando de desarrollar una aplicación para iPhone usando Core Data y estoy usando un predicado muy básico para agarrar objetos. (es decir, nombre_atributo == cadena)
He comprobado el modelo para asegurarme de que los nombres de los atributos sean correctos y sé por esta pregunta SO que RHS significa "Lado Derecho", lo que me lleva a la parte de "cadena". Estoy creando la cadena de formato usando
NSString *predicateString = [NSString stringWithFormat:@"attribute_name==%@", string];
Entonces para ir a buscar, estoy usando esto:
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:_entityName inManagedObjectContext:managedObjectContext];
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:entityDescription];
NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *array = [managedObjectContext executeFetchRequest:request error:&error];
¿Qué me estoy perdiendo? ¿Qué podría causar este error?
Gracias.
Estás haciendo esto mal. No debes crear una cadena de formato.
Supongo (basado en tu reacción a la respuesta de @Brent) que estás haciendo algo como esto:
NSString *predicateString = [NSString stringWithFormat:@"foo == /"%@/"", bar];
NSPredicate *p = [NSPredicate predicateWithFormat:predicateString];
No hagas eso
Haga esto en su lugar:
NSPredicate *p = [NSPredicate predicateWithFormat:@"foo == %@", bar];
La primera fallará si la bar
contiene un carácter "
. La segunda no lo hará.
NSString stringWithFormat:
citar la cadena si realmente desea usar el mensaje NSString stringWithFormat:
o puede usar el mensaje NSPredicate predicateWithFormat:
con el formato y los argumentos porque "hará lo correcto" con el rhs en su situación (sugeriría que utiliza el método NSPredicate
sin las comillas)
NSString *predicateString = [NSString stringWithFormat:@"attribute_name==/"%@/"", string];