【问题标题】:Filter child relation set Core Data过滤子关系集核心数据
【发布时间】:2016-01-03 19:03:01
【问题描述】:

我有一个与 Salary 和 Expense 实体有一对多关系的 Person 实体。 我想按日期过滤孩子的薪水和费用。

通过 NSPredicate 或使用密钥路径

例如:获取 Person.salary.@sum.salaryTotal wheresalaryDate > NSDate()

我发现了一些关于 SUBQUERY 的东西,但不太明白。 Swift 新手。:)

【问题讨论】:

    标签: swift core-data subquery nspredicate


    【解决方案1】:

    发布我最终所做的更新:

    var myFromDate: NSDate?
    var myToDate: NSDate?
    
    let expensesItem: NSObject = (personItem.relToExpenses?.filteredSetUsingPredicate(NSPredicate(format:"(expenseDate >= %@ AND expenseDate =< %@)", myFromDate!, myToDate!)))!
    
    
        let expensesTotal = expensesItem.valueForKeyPath("@sum.expenseTotal") as? NSDecimalNumber ?? 0
    

    Salary 对象也是如此

    【讨论】:

      【解决方案2】:

      如果性能是一个问题,您需要查看内存中的内容和没有的内容。您展示的代码在内存中完成所有工作——如果对象已经在内存中,那么这将为您提供最佳性能。如果没有,使用获取请求并在其上设置谓词会更快。

      我们在核心数据一书的性能一章中详细介绍了这种权衡:https://www.objc.io/books/core-data/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-24
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 2011-04-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多