У меня есть CoreData на моем приложении IOS, но то, что я делаю, собирая все значения из таблицы, в моем случае это таблица Вопросы, которая содержит следующие:CoreData и NSPredicate
@property (nonatomic, retain) NSString * answerA;
@property (nonatomic, retain) NSString * answerB;
@property (nonatomic, retain) NSString * answerC;
@property (nonatomic, retain) NSString * answerD;
@property (nonatomic, retain) NSString * correctAnswer;
@property (nonatomic, retain) NSString * question;
@property (nonatomic, retain) NSString * timeStampLastUsed;
@property (nonatomic, retain) NSNumber * gameType;
@property (nonatomic, retain) NSString * continent;
I Я получаю все значения таким образом:
NSError *error;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Questions" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
то, что я хочу иметь в NSArray * fetchedObjects только те вопросы, которые имеют определенный тип игры.
Как я могу это сделать с помощью NSPredicate?
Спасибо С наилучшими пожеланиями
Как gameType - объект NSNumber, я бы рекомендовал использовать '@" gameType.intValue ==% i ", 0'. Как правило, это работает, если 'intValue' опущен, но это по-прежнему хорошая практика. – mrosales
Теперь я пытаюсь сделать несколько более сложных вещей, я хочу получить все типы игр, которые находятся на континенте Европы: NSPredicate * predicate = [NSPredicate predicateWithFormat: @ "((gameType.intValue ==% i) ИЛИ (gameType.intValue ==% i) ИЛИ (gameType.intValue ==% i)) AND (continent.intValue ==% i)", 0,2,3 , 0]; но это не возвращает мне то, что я ожидаю. Я хочу получить типы игр 0,2 и 3, которые находятся на европейском континенте (0). Может кто-нибудь мне помочь? – mmm
Ваш предикат выглядит правильно с учетом параметров, которые вы предоставили. Какие результаты вы получаете, если таковые имеются? Я считаю, что иногда проще создать «predicateWithBlock:» для тестирования ваших отфильтрованных результатов, а затем реорганизовать это обратно в «predicateWithFormat:», как только у вас появятся нужные результаты. – CaptainRedmuff