核心数据和谓词

时间:2013-03-26 16:28:52

标签: ios objective-c core-data nspredicate

假设我有一个与人有很多关系的实体部门。我希望能够搜索部门体育部门,看看斯科特奥尔森是否在那里工作。 Person斯科特奥尔森并不是唯一的(可能有3个Scotts在3个不同的Department中工作。)

如何搜索Department体育以找到在那里工作的Person斯科特奥尔森,而不是找到其他的Scotts?

我能想到的基本方法是:

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,但我无法理解。

2 个答案:

答案 0 :(得分: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 :(得分:1)

只需在谓词中添加第二个表达式:

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