Я "" створюю 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/