1

(理想的には) キーと値のコーディング コレクション演算子を含む単一の述語を使用して、これをどのように簡素化しますか? (最後に注目する配列は です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ものNSIntegernumber探しています。GamesRoundBOOLsomeBoolProperty

4

1 に答える 1

2

これはあなたが望むことをするようです:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Game"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SUBQUERY(rounds, $r, $r.someBoolProperty = YES).number = @max.rounds.number"];
于 2013-01-06T17:46:50.070 に答える