Core DataでエンティティがTo-many relationshipを持つとき、NSPredicateの条件に、その個数を指定したいことがある。例えば、Entity: DepartmentがTo-many relationship: employeesを持つとして、従業員10人以上の部署のみ抽出など。
そのようなときは、KVC (Key-Value Coding) の@countが使える。
NSPredicateの生成は、以下のようにすればよい。
NSPredicate *pred = [NSPredicate predicateWithFormat:@“employees.@count >= 10”];
これは別にNSPredicateやCore Dataに限った話ではなく、KVCの記述方法なので、KVCであれば何にでも使える。便利! このようにキーパス内で利用できる演算子をコレクション演算子といい、全部で以下のような演算子がある。
@avg
@count
@distinctUnionOfArrays
@distinctUnionOfObjects
@distinctUnionOfSets
@max
@min
@sum
@unionOfArrays
@unionOfObjects
@unionOfSets
参考
- Key-Value Coding Programming Guide : Set and Array Operators
- Apple Developer Forums : “to-many relationship count predicate” で検索すると参考になりそうな議論がいくつか。要ログインのためリンクは割愛。
- 詳解 Objective-C 2.0 : P490-492: コレクション演算子



