我有带参数的类,例如Car
(NSObject的子类),我使用它就像简单的模型:
class Car {
var model: String!
init(json: JSON) {
// ... parse 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"
这是正确的解决方案吗? 我如何使用一种模型满足所有需求?
答案 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
方法并使用指定的初始化选项。