如何实现符合映射的NSManagedObject类

问题描述:

我有一个直接映射JSON的类实现Mappable(ObjectMapper Framework)协议,我试图从NSManagedObject继承。如何实现符合映射的NSManagedObject类

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"] 

} 
} 

这种实现的问题是,编译器会抱怨使用自超初始化之前mapping(map)mapping(map)AbstractModel.swift:19:9: Use of 'self' in method call 'mapping' before super.init initializes self

不幸的是我不能调用超级初始化(super.init(entity: NSEntityDescription, insertIntoManagedObjectContext: NSManagedObjectContext?)),因为我需要self得到NSManagedObjectContext

我该如何解决这个问题?

+0

我不熟悉ObjectMapper,但NSManagedObject可以只* *使用指定的初始化程序创建。但是,您可以传递'context = nil'并稍后将对象插入到上下文中。 –

+1

谢谢,我会尽力实现它。有消息通知你。 – VincentS

我不知道,如果这个解决方案是解决问题的正确方法,但我实现我的课这种方式,它的工作:

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

嗨...代码中的'DBUtils'&MR_defaultContext是什么? –

+0

嗨,DBUtils是一个Util类,它返回当前的ManagedContext,MR_defaultContext()是一个来自MagicalRecord的类。 – VincentS

+1

你有没有任何示例项目这..有兴趣知道如何设置你的fetchrequests和alamofireObjectMapper调用..将是伟大的,如果你可以共享一个示例prroject .. thnx –