2013-03-26 129 views
1

假设我有一个实体部门与人员有多对多的关系。我希望能够搜索Department Sports,看看Scott Olsen人是否在那里工作。 Person Scott Olsen不是唯一的(可能有3个Scotts在3个不同的Department s中工作)。核心数据和谓词

我该如何搜索Department Sports找到Person斯科特奥尔森在那里工作,但找不到其他斯科特?

我能想到的基本方法是:

for (Person *person in sports.persons) { 
    if ([person.name isEqualToString:@"Scott Olsen"]) { 
     // found him! 
    } 
} 

或者:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY persons.name == 'Scott Olsen'"]; 

Department *department = [Department MR_findFirstWithPredicate:predicate]; 

但我不确定如果第二返回斯科特·奥尔森在Departement体育工作。我想,那么我可以检查

if ([department.name isEqualToString:@"Sports"]) 

但似乎应该有更好的方式与NSPredicate做到这一点,但我不能弄明白。

回答

4

这是你在找什么?

NSString *name = @"Scott Olsen"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", name]; 
NSSet *filtered = [sports.persons filteredSetUsingPredicate:predicate]; 

或(你的问题改变之后我张贴上面的代码):

NSString *name = @"Scott Olsen"; 
NSString *department = @"Sports"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@ AND department = %@", 
     name, department]; 
Person *person = [Person MR_findFirstWithPredicate:predicate]; 

(假设你从有一个反比关系 “部门”)。

1

只需添加第二个表达你的断言:

[NSPredicate predicateWithFormat:@"name == 'Sports' && ANY persons.name == 'Scott Olsen'"];