1

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

我如何搜索DepartmentSports 以找到在Person那里工作的 Scott Olsen 而找不到其他 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 来做到这一点,但我想不通。

4

2 回答 2

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];

(假设您从PersonDepartment具有反向关系“部门” )。

于 2013-03-26T16:35:15.557 回答
1

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

[NSPredicate predicateWithFormat:@"name == 'Sports' && ANY persons.name == 'Scott Olsen'"];
于 2013-03-26T16:37:19.240 回答