首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nspredicate是否需要子查询才能正常工作?

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

Stack Overflow用户
提问于 2018-12-23 11:39:25
回答 1查看 19关注 0票数 0

我有一个自定义对象数组,其中有床(1,2,3),壁炉(是或否),书房(是或否)和天花板高度(9-11,11-14,14-16)。我需要允许基于任何/所有/无所选项目进行筛选。因此,用户可能希望看到1&2张床、书房、壁炉和9-11英尺的天花板。或者只有1&2张床。我目前的谓词适用于其中的一些。但它并不是所有的都匹配-只有部分匹配。我想我需要一个子查询。如何创建嵌套的(?)基于过滤器数组的子查询?

现在,用户选择按钮,这些按钮将根据过滤器进行匹配,我使用这些按钮来创建我的谓词。

当前谓词

代码语言:javascript
运行
复制
    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];

我希望允许某人选择任何标准并返回适当的数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-23 17:05:02

子查询与多对多关系一起使用。如果您想过滤多个值,那么fil.predicate的类应该是一个值的数组(或集合)。谓词格式是%K IN %@,例如

代码语言:javascript
运行
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53901039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档