Wenn eine Instanz meiner Klasse initialisiert wird mit NSCoding
, mag ich es mit einem bestehenden Objekt in der Core Data Datenbank zu ersetzen, anstatt Aufruf:Wie gebe ich ein bereits vorhandenes Core Data-Objekt bei der NSCoding-Initialisierung in Swift zurück?
super.init(entity: ..., insertIntoManagedObjectContext: ...)
wie ein neues Objekt einfügen würde in die Datenbank.
class MyClass: NSManagedObject, NSCoding {
required init(coder aDecoder: NSCoder) {
// Find a preexisting object in the Core Data database
var ctx = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext!
var fs = NSFetchRequest(entityName: "MyClass")
// ... Configure the fetch request based on values in the decoder
var err: NSErrorPointer = nil
var results = ctx.executeFetchRequest(fs, error: err)
// ... Error handling, etc
newObject = results[0] as! MyClass
// Attempt to replace self with the new object
self = newObject // ERROR: "Cannot assign to 'self' in a method"
}
func encodeWithCoder(aCoder: NSCoder) {
// Encode some identifying property for this object
}
}
Das war ein fairly common Objective-C-Muster, aber ich kann nicht herausfinden, wie diese 1.2, in Swift zu replizieren, da ein anderes Objekt zu self
Zuweisung eines Kompilierung-Fehler ergibt:
Cannot assign to 'self' in a method
und Selbst wenn es gelingen sollte, scheint Swift es erforderlich zu machen, dass ich 's bezeichneten Initialisierer anrufe, der ein neues Objekt in die Datenbank einfügen würde.
Wie ersetze ich ein Objekt mit einem bereits vorhandenen in der Datenbank zum Zeitpunkt der Initialisierung? Und wenn seine nicht möglich ist (bitte geben Sie eine Referenz, wenn dies der Fall ist), welches Muster sollte ich stattdessen verwenden?
ich denke, das Idiom ist einfach nicht nach dem „Sicherheitsmerkmal“ der Sprache in schnellen erlaubt. – Oxcug