【问题标题】:Core Data and Predicate核心数据和谓词
【发布时间】:2013-03-26 16:28:52
【问题描述】:

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

如何搜索 Department Sports 以找到在那里工作的 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 Sports 中工作的 Scott Olsen。我想我可以检查一下

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

但似乎应该有更好的方法来使用 NSPredicate 来做到这一点,但我想不通。

【问题讨论】:

    标签: ios objective-c core-data nspredicate


    【解决方案1】:

    这是你要找的吗?

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

    (假设你有一个从 Person 到 Department 的反向关系“部门”)。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-07
        • 1970-01-01
        • 2013-08-05
        • 2015-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-01
        相关资源
        最近更新 更多