NSPredicate :通过字典数组获取核心数据请求过滤器

NSPredicate : CoreData fetchRequest filtered by Array of dictionaries

是否可以使用字典数组创建 NSPredicate?

我有以下结构:

[{ name: "foo", city:"Paris"},{name:"bar", city:"London"}]

我想通过这些对过滤我的 NSFetchRequest。 (假设属性在 CoreData 中具有相同的名称)

传递数组时我可以使用关键字IN。但我不明白如何使用一系列词典来实现这一点。

我认为您将无法使用 IN,因此您需要使用多个 OR。大纲:

  1. 遍历数组的所有元素。
  2. 对于每个元素 (dictionary),构造一个如下形式的谓词:

    [NSPredicate predicateWithFormat:@"name == %@ AND city == %@",[dictionary objectForKey:@"name"], [dictionary objectForKey:@"city"]];
    
  3. 将每个这样的谓词添加到谓词的 NSMutableArray (array)

  4. 使用数组构建复合谓词:

    [NSCompoundPredicate orPredicateWithSubpredicates:array]
    

如果性能是个问题,请考虑使用替代变量而不是格式构建单独的谓词。