我的核心数据中有一个一对多的关系设置:
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 对象并将其保存在核心数据中:
context.performChanges {
let day = Day(context: self.context)
day.date = NSDate.today()
day.transactions = filteredTransactions as NSSet?
}
这也将正确保存在 Core Data 中,但在此之后,我过滤掉的交易(每月和每年)已从 lastDay
对象中删除。
如果我再次获取该对象,交易就会消失。
我不知道发生了什么。似乎也删除了任何类型的过滤交易。
我整天都在试图弄清楚发生了什么,但我似乎无法弄清楚问题所在。
对于任何反馈,我们都表示感谢。
最佳答案
创建一个全新的交易列表,并将每笔交易的日期对象设置为新的日期记录:
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
}
}
}
关于ios - NSSet 过滤的对象从先前从核心数据中获取的对象中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41414664/