核心数据对象被写入,但从未读取

Posted

技术标签:

【中文标题】核心数据对象被写入,但从未读取【英文标题】:Core Data Object was written to, but never read 【发布时间】:2019-01-28 23:30:56 【问题描述】:

当我尝试更新我的 Core Data DB 中的现有条目时,我通过 id 获取所需的项目,将其更改为新项目并保存在上下文中。

但是,当我获取对象并替换它时,我收到警告“核心数据对象已写入,但从未读取。”这确实是有道理的,因为我并没有真正使用那个对象,但据我所知,只要给它一个值就可以将它保存在 Core Data 中。

static var current: User? 
    didSet 

        if var userInCoreData = User.get(with: current?.id), let current = current  //userInCoreData is the value with the warning
            userInCoreData = current
        

        CoreDataManager.saveInContext()
    


static func get(with id: String?) -> User? 

    guard let id = id else  return nil 

    let request: NSFetchRequest = User.fetchRequest()

    let predicate = NSPredicate(format: "id = %@", id)
    request.predicate = predicate

    do 
        let users = try CoreDataManager.managedContext.fetch(request)
        return users.first
     catch let error 
        print(error.localizedDescription)
        return nil
    


我想确定,这是覆盖 Core Data 中值的推荐过程,还是我做错了什么?

【问题讨论】:

【参考方案1】:

本节

        if var userInCoreData = User.get(with: current?.id), let current = current  //userInCoreData is the value with the warning
            userInCoreData = current
        

似乎只是更新了局部变量 userInCoreData,而不是 Core Data 中的 User 对象。

所以警告说“您从核心数据中获取数据并设置为一个变量,但您很快为该变量设置了另一个值,永远不要使用核心数据中的第一个值。可以吗?”

你真正想做的是这样的事情吗?

        if var userInCoreData = User.get(with: current?.id), let current = current  
            userInCoreData.someValue = current.someValue
            userInCoreData.anotherValue = current.anotherValue
        

【讨论】:

以上是关于核心数据对象被写入,但从未读取的主要内容,如果未能解决你的问题,请参考以下文章

为啥数据被推入通道但从未从接收器 goroutine 中读取?

我可以使用核心数据读取和写入主包中的数据库吗?

为什么数据没有在此文件中正确写入/读取?

unistd.h read() 正在读取更多数据然后被写入

在 C++ 中写入/读取文件

ACCESS通过一个连接写入的数据,还有一个连接却读取不出来