核心数据对象被写入,但从未读取
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
【讨论】:
以上是关于核心数据对象被写入,但从未读取的主要内容,如果未能解决你的问题,请参考以下文章