Swift 中 JSON 的模型类和核心数据的相同类
Posted
技术标签:
【中文标题】Swift 中 JSON 的模型类和核心数据的相同类【英文标题】:Model class for JSON and same class for core data in Swift 【发布时间】:2016-06-09 07:19:54 【问题描述】:我有带参数的类,例如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】:只需使用NSManagedObject
代表汽车。在 NSManagedObject
子类中创建一个名为 populateFromJSON(json:[String:Object])
的方法,那么您的创建只是稍微复杂一点:
let aCar = NSEntityDescription.insertNewObjectForEntityForName("Car", intoManagedObjectContext:context)
aCar.populateFromJSON(myIncomingJSON)
完成了。
顺便说一句,调用 super.init(entity: entity!, insertIntoManagedObjectContext: nil)
很糟糕,不会产生您想要的结果。
您真的不想在 NSManagedObject
子类上覆盖 init
方法。最好创建一个populate
方法并使用指定的初始化选项。
【讨论】:
以上是关于Swift 中 JSON 的模型类和核心数据的相同类的主要内容,如果未能解决你的问题,请参考以下文章