NSC过滤的对象将从Core Data

时间:2017-01-01 10:04:58

标签: ios swift core-data

我的Core Data中有一对多的关系设置:

Day <----->> Transactions

日期对象将包含NSSet个交易和Date 在某些时候,我想获取最新的Day并将其Transactions过滤一段时间(每月和每年),并将它们添加到另一个Day对象并保存。

这是我的代码:

// get latest day from core data
let lastDay = fetchDays(context: context) { request in
    request.sortDescriptors = Day.defaultSortDescriptors
    request.fetchLimit = 1
}.first

这将为我提供正确的Day对象。在此之后,我想获得过滤后的交易:

let filteredTransactions = lastDay?.transactions?.filtered(using: NSPredicate(format: "period IN %@", [.monthly, .yearly]))

我有过滤后的交易后,我想将它们添加到新的Day对象并将其保存在Core Data中:

context.performChanges {
   let day = Day(context: self.context)
   day.date = NSDate.today()
   day.transactions = filteredTransactions as NSSet?
}

这也将正确保存Core Data内部,但在此之后,我已过滤掉的事务(每月和每年)已从lastDay对象中删除。

如果我再次获取该对象,交易就会消失 我不知道发生了什么。似乎也删除了过滤的任何类型的事务。

我整天都在努力弄清楚发生了什么,但我似乎无法弄清楚问题。
对于任何反馈,我们都表示感谢。

1 个答案:

答案 0 :(得分:1)

创建全新的交易清单,并将每笔交易的日对象设置为新的日记录:

context.performChanges {
    let day = Day(context: self.context)
    day.date = NSDate.today()
    if let transactions = filteredTransactions {
        for t in Array(transactions) {
            let transaction = Transactions(context: self.context)
            transaction.clone(from: t) // write extension method to Transactions
            transaction.day = day
        }
    }

}