ios - NSSet 过滤的对象从先前从核心数据中获取的对象中删除

标签 ios swift core-data

我的核心数据中有一个一对多的关系设置:

Day <----->> Transactions

一天对象将包含交易的 NSSetDate
在某些时候,我想获取最新的 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/

相关文章:

android - Admob 原生高级广告尺寸

ios - SwiftUI 未将自定义字体应用于选项卡式 View

ios - 获取 UITableView 错误 "unable to dequeue a cell with identifier cell"

iphone - 检测轻量级核心数据迁移

ios - NSString 的值返回 null,但不确定为什么?

iOS 将 Web 服务数据保存到设备

ios - Swift 3.0 token过期如何自动调用token?

ios - Swift - UITextField 以编程方式无法输入文本

ios - 在后台线程上安全保存 Core Data 托管对象上下文的正确方法?

ios - 使用核心数据从文本字段中保存和检索数据