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

时间:2019-01-28 23:30:57

标签: swift core-data

当我尝试更新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 个答案:

答案 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
        }