NSPredicate :通过字典数组获取核心数据请求过滤器
NSPredicate : CoreData fetchRequest filtered by Array of dictionaries
是否可以使用字典数组创建 NSPredicate?
我有以下结构:
[{ name: "foo", city:"Paris"},{name:"bar", city:"London"}]
我想通过这些对过滤我的 NSFetchRequest
。 (假设属性在 CoreData 中具有相同的名称)
传递数组时我可以使用关键字IN
。但我不明白如何使用一系列词典来实现这一点。
我认为您将无法使用 IN
,因此您需要使用多个 OR
。大纲:
- 遍历数组的所有元素。
对于每个元素 (dictionary
),构造一个如下形式的谓词:
[NSPredicate predicateWithFormat:@"name == %@ AND city == %@",[dictionary objectForKey:@"name"], [dictionary objectForKey:@"city"]];
将每个这样的谓词添加到谓词的 NSMutableArray (array
)
使用数组构建复合谓词:
[NSCompoundPredicate orPredicateWithSubpredicates:array]
如果性能是个问题,请考虑使用替代变量而不是格式构建单独的谓词。
是否可以使用字典数组创建 NSPredicate?
我有以下结构:
[{ name: "foo", city:"Paris"},{name:"bar", city:"London"}]
我想通过这些对过滤我的 NSFetchRequest
。 (假设属性在 CoreData 中具有相同的名称)
传递数组时我可以使用关键字IN
。但我不明白如何使用一系列词典来实现这一点。
我认为您将无法使用 IN
,因此您需要使用多个 OR
。大纲:
- 遍历数组的所有元素。
对于每个元素 (
dictionary
),构造一个如下形式的谓词:[NSPredicate predicateWithFormat:@"name == %@ AND city == %@",[dictionary objectForKey:@"name"], [dictionary objectForKey:@"city"]];
将每个这样的谓词添加到谓词的 NSMutableArray (
array
)使用数组构建复合谓词:
[NSCompoundPredicate orPredicateWithSubpredicates:array]
如果性能是个问题,请考虑使用替代变量而不是格式构建单独的谓词。