2016-10-29 6 views
0

In meinem benutzerdefinierten NSManagedObject verwende ich einen fehlgeleiteten Initialisierer. Aber selbst wenn es fehlschlägt und ich NSManagedObjectContext speichern, wird das Objekt in Core Data gespeichert.Fehler beim Speichern von NSManagedObject

NSManagedObject:

class Foo: NSManagedObject { 

    @NSManaged var a: String 
    @NSManaged var b: String 

    convenience init?(context: NSManagedObjectContext, a: String?, b: String?) { 
     let description = NSEntityDescription.entity(forEntityName: "Foo", in: context)! 
     self.init(entity: description, insertInto: context) 

     if let a = a { self.a = a } else { return nil } 
     if let b = b { self.b = b } else { return nil } 
    } 
} 

Wie kann ich diese initializer scheitern und immer noch den Kontext sparen, ohne das ausgefallene Objekt mit gerettet werden?

Antwort

0

Sie müssen früher.

Dies ist legal, da es im modernen Swift erlaubt ist, vor der Erfüllung des "Vertrags" eines Initialisierers zu versagen.

+0

Danke, ich habe immer und immer wieder getestet und habe gerade gemerkt, dass die Überprüfung vor dem 'self.init' erfolgen muss, was sehr logisch ist ... –

Verwandte Themen