2017-06-21 2 views
-6

Mein Code:Inheritance in Swift

dbManager = coreDataStack.managedContext as! DbManager 

DbManger Klasse:

class DbManager: NSManagedObjectContext { 

} 

Können Sie mir sagen, was ich verpasst? coreDataStack ist nicht Null, managedContext ist nicht Null, aber App stürzt beim Casting ab.

Antwort

1

Sie haben eine Instanz der Basisklasse, NSManagedObjectContext, und Sie versuchen, es in seine Unterklasse zu transformieren, aber es ist keine.

Vererbung beinhaltet eine Is-a-Beziehung. Eine DbManager Instanz ist eineNSManagedObjectContext, aber das Gegenteil trifft nicht zu.

Anders gesagt, Sie haben eine Klasse namens Car. Dann Unterklasse und erweitern Sie es, um eine RocketCar Klasse zu erstellen. Sie können nicht einfach eine Car instanziieren und sie in eine RocketCar mit einem Cast umwandeln.

+0

Oh, jetzt verstehe ich. Gibt es eine Möglichkeit, diese Referenz zu übergeben? – Laxsion12

+2

@ Laxsion12 [Die Dokumentation für NSManagedObject] (https://developer.apple.com/documentation/coredata/nsmanagedobjectcontext) enthält einen Abschnitt zum Unterklassenaufbau, der mit "Sie werden von der Unterklassenbildung von NSManagedObjectContext dringend abgeraten werden", also nicht wirklich denke du willst es. Ich glaube, das ist ein [XY-Problem] (http://xyproblem.info/). Was versuchst du wirklich? – Aehmlo

+0

Ich möchte DbManager haben, die in anderen DbManagers (NSObject-Unterklassen) haben 1 DbManager = 1 Entity in db. Es ist nur ein Entity-Manager mit Speichern, wählen Sie etc. Methoden und Sie haben Zugriff auf alle diese Manager durch NSManageObjectContex-Unterklasse-Manager – Laxsion12