我有一个直接映射实现Mappable (ObjectMapper框架)协议的JSON类,我正在尝试从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)之前使用self的AbstractModel.swift:19:9: Use of 'self' in method call 'mapping' before super.init initializes self。
不幸的是,我不能在super.init(entity: NSEntityDescription, insertIntoManagedObjectContext: NSManagedObjectContext?)之前调用超级初始化器( mapping(map) ),因为我需要self来获取NSManagedObjectContext。
我该怎么解决这个问题?
发布于 2015-05-20 05:08:59
我不确定这个解决方案是否是解决问题的正确方法,但我以这种方式实现了我的类,它起了作用:
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"]
}
}https://stackoverflow.com/questions/30212301
复制相似问题