当我尝试更新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中值的过程,还是我做错了什么?
答案 0 :(得分:0)
本节
if var userInCoreData = User.get(with: current?.id), let current = current { //userInCoreData is the value with the warning
userInCoreData = current
}
似乎只是在更新核心数据中的局部变量userInCoreData
,而不是User
对象。
因此警告显示为“您是从核心数据中获取数据并设置为变量的,但是您很快将另一个值设置为该变量,请不要使用核心数据中的第一个值。可以吗?”
您真正想做的是这样的事情吗?
if var userInCoreData = User.get(with: current?.id), let current = current {
userInCoreData.someValue = current.someValue
userInCoreData.anotherValue = current.anotherValue
}