我有一系列自定义对象,这些对象具有床(1,2,3),壁炉(是或否),书房(是或否)和天花板高度(9-11,11-14,14-16) 。我需要允许基于任何/全部/没有被选择作为过滤依据的项目进行过滤。因此,用户可能希望看到1和2张床,书房,壁炉和9-11英尺的天花板。或仅1和2张床。我当前的谓词适用于其中一些。但这并不能全部-只是有些。我在想我需要一个子查询。如何基于过滤器数组创建nested(?)子查询?
现在,用户选择按钮,并且这些按钮与“过滤器”匹配,而我使用这些按钮来创建我的谓词。
当前谓词
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];
我想允许某人选择任何条件并返回适当的数据。
答案 0 :(得分:1)
子查询用于多对多关系。如果要过滤多个值,则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];