2017-01-01 55 views
0

我在我的核心数据一对多的关系设置:的NSSet过滤对象从以前提取的对象中删除从核心数据

Day <----->> Transactions 

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

这里是我的代码:

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

这将让我正确的日期对象。这之后,我想过滤的交易:

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

后,我有过滤的交易我想将它们添加到新的一天对象,并保存在核心数据:

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

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

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

我整天试图弄清楚发生了什么,但我似乎无法弄清楚问题所在。
任何反馈将不胜感激。

+0

是白天和交易打破了结果之间的关系? lastDay与已过滤的交易相关,但是在您创建新的Day记录并将已过滤的交易的所有权更改为新记录之后? – bubuxu

+0

我能做什么?我尝试创建NSSet的可变副本,结果仍然相同 – Kobe

回答

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

} 
+0

非常棒的答案。谢谢,现在都在工作。 – Kobe

相关问题