Запрос извлечения CoreData - сложный предикат
Как бы я упростил это, используя (в идеале) один предикат с операторами сбора код-ключ-значение? (Массив интересов в конце концов filteredGames
.)
NSManagedObjectContext *context;
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Game" inManagedObjectContext:context];
NSArray *games = [context executeFetchRequest:request error:nil];
NSMutableArray *filteredGames = [[NSMutableArray alloc] init];
for (Game *game in games) {
NSInteger maxRoundNumber = [game.rounds valueForKeyPath:@"@max.number"];
Round *maxRound = [[game.rounds filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"number = %d", maxRoundNumber]] anyObject];
if (maxRound.someBoolProperty)
[filteredGames addObject:game];
}
Игра имеет NSSet
имущество rounds
из Rounds
, а также Round
имеет NSInteger
имущество number
и я ищу тех, Games
чье наибольшее число Round
имеет некоторые BOOL
имущество someBoolProperty
,
1 ответ
Решение
Кажется, это делает то, что вы хотите:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Game"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SUBQUERY(rounds, $r, $r.someBoolProperty = YES).number = @max.rounds.number"];