如何实现符合 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

ObjectMapper的使用

如何在 Object Mapper for Swift 上解析数组对象

ObjectMapper 基本使用