NSPredicate在多对多关系中引用多个字段?

Sea*_*ell 6 iphone core-data objective-c nspredicate

我正在使用SQLite持久性存储.我有一个有很多关系的NSManagedObject班级. 有几个领域:DenBearBear

Bear:
    breed
    color
    age
    ...
Run Code Online (Sandbox Code Playgroud)

当我构建Den对象的获取请求时,我可以过滤到Bear与某个字段值相关的对象:

NSPredicate *hasGrizzlyPred = [NSPredicate predicateWithFormat:@"ANY Bear.breed == 'grizzly'"];
Run Code Online (Sandbox Code Playgroud)

或者我可以轻松地搜索Den有棕熊的东西:

NSPredicate *hasBrownBearPred = [NSPredicate predicateWithFormat:@"ANY Bear.color == 'brown'"];
Run Code Online (Sandbox Code Playgroud)

但有没有什么方法可以寻找一只Den棕色和灰熊的熊?以下是合法的,但不正确,我认为:

// Not quite right: search for a den with a brown bear AND a grizzly
NSPredicate *hasBrownAndGrizzlyPred = [NSPredicate predicateWithFormat:@"ANY Bear.color == 'brown' AND ANY Bear.breed == 'grizzly'"];
Run Code Online (Sandbox Code Playgroud)

Bar*_*ark 6

您可以使用SUBQUERY谓词表达式执行此操作.如果查询带有熊的窝点(其中Den有与被Bear命名的多对多关系bears),它既是棕色又是灰熊:

[NSPredicate predicateWithFormat:@"SUBQUERY(bears, $b, $b.color=='brown' AND $b.breed=='grizzly').@count > 0"];