/ / Чи можна використовувати JSONDecoder () за межами init () для оновлення атрибутів об'єкта? - ios, swift, core-data, кодуються

Чи можна використовувати JSONDecoder () за межами init (), щоб оновити атрибути об'єкта? - ios, швидкі, основні дані, кодовані

Я "" створюю NSManagedObjects за допомогою кодуючих jsondecode.decode([User].self, from: jsonDataRaw) але моя проблема полягає в тому, що decode.decode () створює новий об'єкт кожного разу, але замість цього потрібний спосіб оновлення існуючих об'єктів за допомогою jsonData замість створення нових.

Чи є спосіб зробити це за допомогою кодування?

class User : NSManagedObject, Codable {
required convenience init(from decoder: Decoder) throws {

guard let contextUserInfoKey = CodingUserInfoKey.context,
let managedObjectContext = decoder.userInfo[contextUserInfoKey] as? NSManagedObjectContext,
let entity = NSEntityDescription.entity(forEntityName: MERUser.entityName, in: managedObjectContext) else {
fatalError("Failed to decode")
}
self.init(entity: entity, insertInto: managedObjectContext)
try update(with: decoder)
}

func update(with decoder: Decoder) throws {

// Decode
guard let values = try? decoder.container(keyedBy: CodingKeys.self) else {
assertionFailure("no decoder")
return
}
self.id = (try values.decode(Int64.self, forKey: .id))
if let value = try? values.decodeIfPresent(Int64.self, forKey: .currentPoint),
let unwrappedValue = value {
self.currentPoint = unwrappedValue
}
}

Відповіді:

2 для відповіді № 1

Схоже, ви можете, але вам доведеться трохи засукати рукави. Стабільне ядро ​​має статтю про те, як підійти до цього.

З інтро:

Вони є корисними, оскільки ці протоколи євідсутня одна функціональність, яку я вважаю досить поширеною при роботі з віддаленими службами: можливість оновлення існуючого об'єкта моделі з даних. Створення цієї функціональної можливості - це чудова вправа для вивчення протоколів кодування та пов'язаних типів.

https://stablekernel.com/understanding-extending-swift-4-codable/