Запрос извлечения 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"];
Другие вопросы по тегам