在Swift 3 / Xcode 8中,如何为Core Data实体创建便利初始化程序?现在我有一个普通的类,并使用一个方便的初始化器来保存来自JSON的数据,如下所示:
convenience init?(json: [String: Any]) {
let id = json["id"] as! Int
let title = json["title"] as! String
let subtitle = json["subtitle"] as? String
self.init(
anId: id,
aTitle: title,
aSubtitle: subtitle,
)
}
是否有一种简单的方法可以将这样的内容添加到Core Data定义的实体中?
答案 0 :(得分:2)
是的,无论如何你必须拨打NSManagedObject / NSEntityDescription
的指定初始化程序。
这样的事情:
class Foo: NSManagedObject {
@NSManaged var title: String
@NSManaged var subtitle: String?
@NSManaged var id: Int32
class func create(in context: NSManagedObjectContext, from json: [String: Any]) -> Foo {
let foo = NSEntityDescription.insertNewObject(forEntityName: "Foo", into: context) as! Foo
foo.title = json["title"] as! String
foo.subtitle = json["subtitle"] as? String
foo.id = json["id"] as! Int32
return foo
}
}
create(in
是一种类方法,你可以称之为
let context = appDelegate.managedObjectContext
let newItem = Foo.create(in: context, from: jsonDictionary)
appDelegate
是AppDelegate
个实例,jsonDictionary
是[String:Any]
字典。
答案 1 :(得分:0)
只需使用方便的初始化程序扩展您的类:
convenience init(
context moc: NSManagedObjectContext,
json: [String: Any]
) {
self.init(context: moc)
id = json["id"] as? Int
title = json["title"] as? String
subtitle = json["subtitle"] as? String
}