我的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
对象中删除。
如果我再次获取该对象,交易就会消失 我不知道发生了什么。似乎也删除了过滤的任何类型的事务。
我整天都在努力弄清楚发生了什么,但我似乎无法弄清楚问题。
对于任何反馈,我们都表示感谢。
答案 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
}
}
}