Estoy tratando de escribir un método que intenta recuperar un objeto basado en un predicado utilizando una variable (como parte de un NSXMLParser). El código es el siguiente:Utilizando una variable para Elemento nombre en Core Data Predicate
tengo estas variables definidas en la clase:
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (strong, nonatomic) NSString *model;
@property (strong, nonatomic) NSString *element;
Ahora bien, en el método, me juego hasta la solicitud de la siguiente manera:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:self.model inManagedObjectContext:self.managedObjectContext];
[request setEntity:entity];
Ahora el reto - lo que yo quiero para ser capaz de hacer es:
// DOES NOT WORK
[request setPredicate:[NSPredicate predicateWithFormat:@"%@ == %@", self.element,string]];
B ut que no devuelve ningún resultado. Después de algún rededor, noto que esta hace trabajo:
if ([self.element isEqualToString:@"name"]) {
[request setPredicate:[NSPredicate predicateWithFormat:@"name == %@", string]];
}
Esto me dice que mi self.element
está ajustada correctamente (? Creo), pero que el predicado no le gusta el lado izquierdo de la expresión siendo una variable.
También probé:
[request setPredicate:[NSPredicate predicateWithFormat:@"%s == %@", [self.element UTF8String],string]];
... sólo para ver si tal vez prefiere una cadena. Yo tampoco podría hacer ese trabajo.
¿Es lo que intento incluso posible? He leído todo lo que puedo de la documentación de Core Data y no puedo encontrar ningún código de muestra que lo haga de esta manera, pero tampoco encontré nada que dijera que no fuera posible.
EDIT: y ahora el código de trabajo:
[request setPredicate:[NSPredicate predicateWithFormat:@"%K == %@", self.element,string]];
Esto es perfecto, gracias. La información específica que hace que mi código funcione es la variable% K que trata el argumento como una clave en lugar de un valor. Ahora funciona =) – valdarin
de nada :) Los datos básicos y los Predicados son tecnologías increíbles y puede hacer todo con ellos ... – matteodv