2013-03-26 140 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'"];