如何实现符合 Mappable 的 NSManagedObject 类
Posted
技术标签:
【中文标题】如何实现符合 Mappable 的 NSManagedObject 类【英文标题】:How to implement NSManagedObject class conforming to Mappable 【发布时间】:2015-05-13 10:34:50 【问题描述】:我有一个类直接映射实现 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
不幸的是,我无法在 mapping(map)
之前调用超级初始化程序 (super.init(entity: NSEntityDescription, insertIntoManagedObjectContext: NSManagedObjectContext?)
),因为我需要 self
才能获得 NSManagedObjectContext
。
我该如何解决这个问题?
【问题讨论】:
我不熟悉 ObjectMapper,但是 NSManagedObject 只能使用指定的初始化程序来创建。但是,您可以传递context=nil
并稍后将对象插入到上下文中。
谢谢,我会尝试以这种方式实现它。我会及时通知你的。
【参考方案1】:
我不确定这个解决方案是否是解决问题的正确方法,但我以这种方式实现了我的课程并且它有效:
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"]
【讨论】:
嗨...您的代码中的“DBUtils”和 MR_defaultContext 是什么? 嗨,DBUtils 是一个返回当前 ManagedContext 的 Util 类,MR_defaultContext() 是 MagicalRecord 中的一个类。 你有这方面的示例项目吗..有兴趣知道你是如何设置你的 fetchrequests 和 alamofireObjectMapper 调用的..如果你能分享一个示例项目..thnx 会很棒..thnx 很遗憾没有,抱歉!我只是有一个富有成效的项目,我无法与您分享。让我知道是否可以帮助您解决任何其他问题。 我很想知道使用此方法是否遇到任何问题。如果你能提供DBUtils().getManagedObjectContext()
的来源也很好。以上是关于如何实现符合 Mappable 的 NSManagedObject 类的主要内容,如果未能解决你的问题,请参考以下文章
AlamoFire + ObjectMapper,如何让函数获取 Mappable 类型的参数?
如何在 Swift 中使用 Mappable 协议映射自定义对象的领域列表
BaseObject可以有NSObject,Mappable和Object swift