我的 nspredicate 是否需要子查询才能正常工作?

Is a subquery needed for my nspredicate to work properly?

我有一组自定义对象,它们有床 (1,2,3)、壁炉(是或否)、书房(是或否)和天花板高度 (9-11,11-14,14- 16).我需要允许基于 any/all/none 被选择作为过滤依据的项目进行过滤。因此,用户可能希望看到 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];

我想允许某人选择任何条件和 return 适当的数据。

子查询用于对多关系。如果要过滤多个值,则 fil.predicate 的 class 应该是一个值数组(或集合)。谓词格式为%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];    

参见Aggregate Operations in Predicate Programming Guide