如何实现符合Mappable的NSManagedObject class
How to implement NSManagedObject class conforming to Mappable
我有一个 class 直接映射 JSON 实现 Mappable
(ObjectMapper Framework) 协议,我正在尝试继承 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"]
}
}
此实现的问题是编译器抱怨在超级初始化程序之前使用 self 的 mapping(map)
:
AbstractModel.swift:19:9: Use of 'self' in method call 'mapping' before super.init initializes self
不幸的是,我无法在 mapping(map)
之前调用超级初始化程序 (super.init(entity: NSEntityDescription, insertIntoManagedObjectContext: NSManagedObjectContext?)
),因为我需要 self
才能获得 NSManagedObjectContext
.
我该如何解决这个问题?
我不确定这个解决方案是否是解决问题的正确方法,但我以这种方式实施了我的 class 并且它奏效了:
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"]
}
}
我有一个 class 直接映射 JSON 实现 Mappable
(ObjectMapper Framework) 协议,我正在尝试继承 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"]
}
}
此实现的问题是编译器抱怨在超级初始化程序之前使用 self 的 mapping(map)
:
AbstractModel.swift:19:9: Use of 'self' in method call 'mapping' before super.init initializes self
不幸的是,我无法在 mapping(map)
之前调用超级初始化程序 (super.init(entity: NSEntityDescription, insertIntoManagedObjectContext: NSManagedObjectContext?)
),因为我需要 self
才能获得 NSManagedObjectContext
.
我该如何解决这个问题?
我不确定这个解决方案是否是解决问题的正确方法,但我以这种方式实施了我的 class 并且它奏效了:
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"]
}
}