2013-08-01 3 views
0

У меня есть 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?

Спасибо С наилучшими пожеланиями

ответ

1

Если вы знаете значение типа игры, которую вы ищете, вы можете использовать что-то вроде этого:

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"gameType == %i", 0]]; 

Установив предикат на ваш запрос выборки, он будет отфильтровывать результаты и возвращать только те элементы, которые вас интересуют.

+1

Как gameType - объект NSNumber, я бы рекомендовал использовать '@" gameType.intValue ==% i ", 0'. Как правило, это работает, если 'intValue' опущен, но это по-прежнему хорошая практика. – mrosales

+0

Теперь я пытаюсь сделать несколько более сложных вещей, я хочу получить все типы игр, которые находятся на континенте Европы: 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

+0

Ваш предикат выглядит правильно с учетом параметров, которые вы предоставили. Какие результаты вы получаете, если таковые имеются? Я считаю, что иногда проще создать «predicateWithBlock:» для тестирования ваших отфильтрованных результатов, а затем реорганизовать это обратно в «predicateWithFormat:», как только у вас появятся нужные результаты. – CaptainRedmuff

Смежные вопросы