Базовый объект данных был записан, но никогда не читается - PullRequest
0 голосов
/ 29 января 2019

Когда я пытаюсь обновить существующую запись в моей основной базе данных, я выбираю нужный элемент по идентификатору, меняю его на новый элемент и сохраняю в контексте.

Однако, когда я выбираю объект изаменив его, я получаю предупреждение «Базовый объект данных был записан, но никогда не читается».Это имеет смысл, поскольку я на самом деле не использую этот объект, но, насколько я понимаю, просто присвоение ему значения сохраняет его в 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 голосов
/ 29 января 2019

Этот раздел

        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
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...