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

    if filterCell[0][0] {
        predicatesArray.append(NSPredicate(format: "type == %@", "budget" as NSString))
    }
    if filterCell[0][1] {
        predicatesArray.append(NSPredicate(format: "type == %@", "expense" as NSString))
    }

回到主表视图,我得到了以下代码行:
fetchRequest.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: predicatesArray)

当只选择一个预算或费用时,这很好用,当它们都被选中时,表视图为空(很明显,类型不能同时是“预算”和“费用”),所以我切换到orPredicateWithSubpredicates。现在,如果我在过滤器中选择“ budget ”,然后按OK,我仍然会得到费用条目,反之亦然,因为此ViewController包含默认谓词(用户在选择日期范围(例如13.11)时会进入该视图-例如16.11),并且使用orPredicateWithSubpredicates不会执行任何操作,因为我的日期谓词将始终为true,唯一的选择是andPredicateWithSubpredicates
我应该在代码中进行哪些修改才能使其正常运行?

最佳答案

我解决了问题在于设置谓词不应用它们时的正确方法是andPredicateWithSubpredicates,而我应用谓词的方法是使用以下代码:

    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))
    }

关于ios - NSCompoundPredicate不能按我想要的方式工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47336074/

10-14 22:11