JSON的模型类和Swift中核心数据的相同类

时间:2016-06-09 07:19:54

标签: ios json swift class core-data

我有带参数的类,例如Car(NSObject的子类),我使用它就像简单的模型:

class Car {
    var model: String!

    init(json: JSON) {    

        // ... parse JSON ...
    }
}

我可以:

  • 使用init'初始化;
  • 将JSON数据解析为此模型;

然后在我的VC中使用这个类:添加数据,删除数据等。任何我需要的东西。

此外,我想将此模型保存到核心数据,但出于此目的,我需要其他模型:

class Car: NSManagedObject {
    @NSManaged var model: String!
}

这个课程我不能用于解析和简单初始化。

但是,我可以创建关注初始化:

class Car: NSManagedObject {
    @NSManaged var model: String!

    init() {
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let managedContext = appDelegate.managedObjectContext    
        let entity = NSEntityDescription.entityForName("Car", inManagedObjectContext: managedContext)

        super.init(entity: entity!, insertIntoManagedObjectContext: nil)
    }

    convenience init(json: JSON) {
        self.init()

        // ... parse JSON ...
    }
 }

然后我将使用这个类:

var car = Car()
car.model  = "Toyota"

这是正确的解决方案吗? 我如何使用一种模型满足所有需求?

1 个答案:

答案 0 :(得分:0)

只需使用NSManagedObject代表Car。在那个NSManagedObject子类中创建一个名为populateFromJSON(json:[String:Object])的方法,那么你的创建只会稍微复杂一些:

let aCar = NSEntityDescription.insertNewObjectForEntityForName("Car", intoManagedObjectContext:context)
aCar.populateFromJSON(myIncomingJSON)

完成了。

顺便说一下,调用super.init(entity: entity!, insertIntoManagedObjectContext: nil)很糟糕,不会产生你想要的结果。

您真的不希望在init子类上覆盖NSManagedObject个方法。最好创建一个populate方法并使用指定的初始化选项。