我有一个自定义对象数组,其中有床(1,2,3),壁炉(是或否),书房(是或否)和天花板高度(9-11,11-14,14-16)。我需要允许基于任何/所有/无所选项目进行筛选。因此,用户可能希望看到1&2张床、书房、壁炉和9-11英尺的天花板。或者只有1&2张床。我目前的谓词适用于其中的一些。但它并不是所有的都匹配-只有部分匹配。我想我需要一个子查询。如何创建嵌套的(?)基于过滤器数组的子查询?
现在,用户选择按钮,这些按钮将根据过滤器进行匹配,我使用这些按钮来创建我的谓词。
当前谓词
Filters is an array of keys and predicate strings like 'beds, 1' and 'ceilings, 9-11'
`NSMutableArray *subPredicates = [NSMutableArray array];
for (Filter*fil in filters) {
NSPredicate *unitsPredicate = [NSPredicate predicateWithFormat:@"%K == %@", fil.key, fil.predicate];
[subPredicates addObject:bedsPredicate];
}
NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:subPredicates];
NSLog(@"homes: %@", [searchArray filteredArrayUsingPredicate:predicate]);
NSArray *ar = [searchArray filteredArrayUsingPredicate:predicate];
我希望允许某人选择任何标准并返回适当的数据。
发布于 2018-12-23 17:05:02
子查询与多对多关系一起使用。如果您想过滤多个值,那么fil.predicate
的类应该是一个值的数组(或集合)。谓词格式是%K IN %@
,例如
for (Filter*fil in filters) {
NSPredicate *unitsPredicate;
if ([fil.predicate isKindOfClass:[NSArray class]])
unitsPredicate = [NSPredicate predicateWithFormat:@"%K IN %@", fil.key, fil.predicate];
else
unitsPredicate = [NSPredicate predicateWithFormat:@"%K == %@", fil.key, fil.predicate];
[subPredicates addObject:bedsPredicate];
}
NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:subPredicates];
https://stackoverflow.com/questions/53901039
复制相似问题