Я пытаюсь написать метод, который пытается получить объект на основе предиката с использованием переменной (как часть NSXMLParser).Код выглядит так:
У меня есть эти переменные, определенные в классе:
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (strong, nonatomic) NSString *model;
@property (strong, nonatomic) NSString *element;
Теперь в методе я настроил запрос следующим образом:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:self.model inManagedObjectContext:self.managedObjectContext];
[request setEntity:entity];
Теперь проблема - что я хочу уметь делать это:
// DOES NOT WORK
[request setPredicate:[NSPredicate predicateWithFormat:@"%@ == %@", self.element,string]];
Но это не дает никаких результатов. Поработав немного, я заметил, что это действительно работает:
if ( [self.element isEqualToString:@"name"] ) {
[request setPredicate:[NSPredicate predicateWithFormat:@"name == %@", string]];
}
Это говорит мне, что мой self.element
установлен правильно (я думаю?), Но что предикат не как будто левая часть выражения является переменной.
Я также пробовал:
[request setPredicate:[NSPredicate predicateWithFormat:@"%s == %@", [self.element UTF8String],string]];
... просто посмотреть, не предпочитает ли он строку. Я тоже не мог заставить это работать.
Возможно ли то, что я пытаюсь сделать? Я прочитал все, что мог, из документации Core Data, и я не могу найти образец кода, который делает это таким образом, но я также не нашел ничего, чтобы сказать, что это невозможно.
РЕДАКТИРОВАТЬ: а теперь рабочий код:
[request setPredicate:[NSPredicate predicateWithFormat:@"%K == %@", self.element,string]];