如何实现符合Mappable的NSManagedObject类

Vin*_*ntS 6 initializer nsmanagedobject ios swift

我有一个类直接映射JSON实现Mappable(ObjectMapper框架)协议,我试图继承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"]

}
}
Run Code Online (Sandbox Code Playgroud)

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

不幸的是我以前不能调用super initializer(super.init(entity: NSEntityDescription, insertIntoManagedObjectContext: NSManagedObjectContext?))mapping(map)因为我需要self得到它NSManagedObjectContext.

我该怎么解决这个问题?

Vin*_*ntS 6

我不确定这个解决方案是否是解决问题的正确方法,但我以这种方式实现了我的课程并且它有效:

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

}
}
Run Code Online (Sandbox Code Playgroud)