/ / Ist es möglich, einen JSONDecoder () außerhalb von init () zu verwenden, um die Attribute eines Objekts zu aktualisieren? - ios, swift, Kerndaten, kodierbar

Ist es möglich, einen JSONDecoder () außerhalb von init () zu verwenden, um die Attribute eines Objekts zu aktualisieren? - ios, swift, Kerndaten, kodierbar

Ich erstelle NSManagedObjects mit Codable "s jsondecode.decode([User].self, from: jsonDataRaw) aber mein Problem ist, dass decode.decode () jedes Mal ein neues Objekt erstellt, aber stattdessen brauche ich eine Möglichkeit, existierende Objekte mit dem jsonData zu aktualisieren, anstatt neue zu erstellen.

Gibt es eine Möglichkeit, dies mit Codable zu tun?

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

Antworten:

2 für die Antwort № 1

Sieht aus wie du kannst, aber du musst deine Ärmel ein wenig aufrollen. Stable Kernel hat einen Artikel darüber, wie man das angehen kann.

Aus dem Intro:

So nützlich diese Protokolle auch sind, sie sind esEin Teil der Funktionalität, die ich finde, ist ziemlich häufig bei der Arbeit mit Remote-Diensten: die Möglichkeit, ein vorhandenes Modellobjekt aus Daten zu aktualisieren. Der Aufbau dieser Funktionalität ist eine großartige Übung, um die Codable-Protokolle und verwandte Typen zu erkunden.

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