2017-04-13 3 views
2

Hallo Ich arbeite mit CoreData Projekt und JSON Antwort vom Server. Mein Ziel ist es ein Entityfailableinitializer von json Parameter erstellen, die zunächst prüfen, ob entity bereits vorhanden sind (per Scheck Eigenschaft „id“ vergleichen JSon [ "id] Feld. Wenn Unternehmen bereits vorhanden sind. Die initializer nur Entität mit json aktualisieren. Wenn Einheit nicht existieren, wird die initializer eine neue Einheit schaffen und mit dem json Eigenschaft neue Entität aktualisieren.Swift CoreData erstellen oder aktualisieren Entität von JSON

Wer weiß, wie wir die failable initializer erstellen

ich dies versucht haben, aber nicht wissen, es ist richtig oder nicht (etwas unwrap optional haben. Hilfe ist viel schätzen. Danke!

import SwiftyJSON 
import CoreData 

extension Movie { 
    struct Keys { 
     static let id = "id" 
     static let title = "title" 
    } 

    convenience init?(in context: NSManagedObjectContext!, with json: JSON?) { 

     self.init(entity: NSEntityDescription.entity(forEntityName: "Movie", in: context)!, insertInto: context) 
     guard let json = json else { 
      return nil 
     } 
     id = json[Keys.id].numberValue 
     title = json[Keys.title].string 

    } 

    func update(from json: JSON?) { 
     guard let json = json else { 
      return 
     } 

     id = json[Keys.id].numberValue 
     title = json[Keys.title].string 
    } 

} 
+0

Wer hat ideal? –

+0

Haben Sie einen Compilerfehler erhalten? Welche Linie? Was war es? –

+0

Hallo, es gibt keinen Compilerfehler, aber ich weiß nicht, ob es korrekt ist oder nicht. Es gibt noch eine Sache, es gibt keine Überprüfung für ein vorhandenes Objekt vor dem Erstellen neuer Entität –

Antwort

1

Ich glaube nicht, dass die Init der richtige Ort ist, um nach einem vorhandenen Objekt zu suchen.

Was ich tun würde, ist eine Klasse func Film hinzufügen, die ein Film-Objekt findet oder erzeugt, so etwas wie:

/// Returns an existing Movie if the id exists, or a new one if not. 
/// Can return nil if json is nil or missing keys 
class func findOrCreate(in context: NSManagedObjectContext!, with json: JSON?) -> Movie? { 
    // If JSON is nil, return nil 
    // (your code here) 
    // Look for an existing movie and return it if you find one 
    // (your code here) 

    // If there is no existing one call the init 
    return Movie(in: content, with: json) 
} 
+0

danke für Ihre Antwort. Wie kombinieren wir das? Der obige Initialisierer ist immer noch korrekt. Wir müssen nur eine Klasse func findOrCreate hinzufügen? –

+0

Das ist, was ich vorschlage. Außerdem können Sie Ihre Init verbessern, indem Sie nil zurückgeben, wenn der json nicht die benötigten Schlüssel hat. –

+0

Hallo kann mit dem Inhalt von findOrCreate helfen. Seem wird einige Duplikate im Vergleich zum Initialisierer haben. –

Verwandte Themen