2015-05-13 2 views
5

Ich habe eine Klasse, die direkt JSON unter Verwendung der Mappable (ObjectMapper Framework) Protokoll und ich versuche, von NSManagedObject erben.Wie zu implementieren NSManagedObject-Klasse konform zu Mappable

class AbstractModel: NSManagedObject, Mappable { 

@NSManaged var uuid: String? 
@NSManaged var updatedAt: String? 
@NSManaged var createdAt: String? 

required init?(_ map: Map) { 
    mapping(map) 
} 

func mapping(map: Map) { 
    uuid  <- map["uuid"] 
    updatedAt <- map["updatedAt"] 
    createdAt <- map["createdAt"] 

} 
} 

Das Problem bei dieser Implementierung ist, dass der Compiler über die mapping(map) beklagt, die selbst nutzt vor dem Super-Initialisierer: AbstractModel.swift:19:9: Use of 'self' in method call 'mapping' before super.init initializes self

Leider kann ich nicht den Super-initializer nennen (super.init(entity: NSEntityDescription, insertIntoManagedObjectContext: NSManagedObjectContext?)) vor mapping(map) weil ich self brauche um die NSManagedObjectContext zu bekommen.

Wie soll ich dieses Problem lösen?

+0

Ich bin nicht vertraut mit ObjectMapper, sondern ein NSManagedObject kann * nur * mit dem angegebenen Initialisierer erstellt werden. Sie können jedoch "context = nil" übergeben und das Objekt später in einen Kontext einfügen. –

+1

Danke, ich werde versuchen, es so zu implementieren. Ich werde dich auf dem Laufenden halten. – VincentS

Antwort

6

Ich bin mir nicht sicher, ob diese Lösung die richtige Art und Weise ist, das Problem zu lösen, aber ich meine Klasse implementiert auf diese Weise, und es funktioniert:

class AbstractModel: NSManagedObject, Mappable { 

@NSManaged var uuid: String? 
@NSManaged var updatedAt: String? 
@NSManaged var createdAt: String? 

override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) { 
    super.init(entity: entity, insertIntoManagedObjectContext: DBUtils().getManagedObjectContext()) 
} 

required init?(_ map: Map) { 
    var ctx = NSManagedObjectContext.MR_defaultContext() 
    var entity = NSEntityDescription.entityForName("AbstractModel", inManagedObjectContext: ctx) 
    super.init(entity: entity!, insertIntoManagedObjectContext: ctx) 

    mapping(map) 
} 

func mapping(map: Map) { 
    uuid  <- map["uuid"] 
    updatedAt <- map["updatedAt"] 
    createdAt <- map["createdAt"] 

} 
} 
+0

Hallo ... Was ist 'DBUtils' & MR_defaultContext in Ihrem Code? –

+0

Hallo, DBUtils ist eine Util-Klasse, die den aktuellen ManagedContext zurückgibt und MR_defaultContext() ist eine Klasse von MagicalRecord. – VincentS

+1

Haben Sie irgendein Beispielprojekt für dieses. Interessiert, um zu wissen, wie Sie Ihre fetchrequests und alamofireObjectMapper Aufrufe eingerichtet haben..will großartig sein, wenn Sie ein Beispielproject..thnx teilen können –

Verwandte Themen