首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSCompoundPredicate不像我想的那样工作

NSCompoundPredicate不像我想的那样工作
EN

Stack Overflow用户
提问于 2017-11-16 17:45:25
回答 1查看 400关注 0票数 1

我正在构建一个费用管理器,我有一个带有过滤器的搜索函数。对于所选的每个筛选器,我将各自的谓词附加到fetchedResultsController.的谓词数组中。在我的过滤器中,我有“预算”和“费用”两个选项。下面的代码显示了我如何附加谓词。

代码语言:javascript
复制
    if filterCell[0][0] {
        predicatesArray.append(NSPredicate(format: "type == %@", "budget" as NSString))
    }
    if filterCell[0][1] {
        predicatesArray.append(NSPredicate(format: "type == %@", "expense" as NSString))
    }

回到主表视图,我得到了以下代码:

代码语言:javascript
复制
fetchRequest.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: predicatesArray)

当只选择一个预算或支出时,这是很好的,当它们都被选中时,表视图是空的(很明显,类型的不能同时是“”和“ so ”),所以我切换到了orPredicateWithSubpredicates。现在,如果我在筛选器中选择“”并按OK键,我仍然会得到费用条目,反之亦然,因为这个视图控制器包含一个默认谓词(例如,当用户选择一个日期周期(比如13.11 - 16.11 )),并且使用orPredicateWithSubpredicates不做任何事情,因为我的日期谓词总是正确的,唯一的选项是andPredicateWithSubpredicates

我应该在代码中修改什么,这样它才能正常工作?

EN

回答 1

Stack Overflow用户

发布于 2017-11-16 17:55:45

我解决了。问题是,当设置没有应用them.The的谓词时,正确的方式是andPredicateWithSubpredicates,而我应用谓词的方式是使用以下代码:

代码语言:javascript
复制
    if filterCell[0][0] && filterCell[0][1] {
        predicatesArray.append(NSPredicate(format: "(type == %@) OR (type == %@)", "budget" as NSString, "expense" as NSString))
    } else if filterCell[0][0] {
        predicatesArray.append(NSPredicate(format: "type == %@", "budget" as NSString))
    } else if filterCell[0][1] {
        predicatesArray.append(NSPredicate(format: "type == %@", "expense" as NSString))
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47336074

复制
相关文章

相似问题

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