在调用super.init
之前,有没有办法在init中将类名称作为String我想为NSManagedObject的子类创建init方法,所以我不需要每次都创建实体。这个CoreDataManagedObject是一个抽象类,我所有的ManagedObject都需要继承它。现在我怎样才能将init()中的className作为String?
class CoreDataManagedObject: NSManagedObject {
init() {
let entityName = <get class name here as a String>
let entity = NSEntityDescription.entityForName(entityName, inManagedObjectContext: coreDataStack.context)!
super.init(entity: entity, insertIntoManagedObjectContext: coreDataStack.context)
}
}
class Company: CoreDataManagedObject {
}
我无法在super.init之前使用self,所以我想知道init()中是否还有另一种方法来获取将要创建哪个对象的信息。如果我正在创建公司对象,我只想要entityName =&#34;公司&#34;。
答案 0 :(得分:0)
您可以使用协议执行此操作,但您必须将其添加到所有实体类中:
protocol CoreEntityClass
{
init(forEntity:String)
}
extension CoreEntityClass
{
init()
{
self = Self(forEntity:"\(Self.self)")
}
}
class CoreDataManagedObject:NSManagedObject
{
required init(forEntity entityName:String)
{
let entity = NSEntityDescription.entityForName(entityName, inManagedObjectContext: coreDataStack.context)!
super.init(entity: entity, insertIntoManagedObjectContext: coreDataStack.context)
}
}
class Company:CoreDataManagedObject, CoreEntityClass
{
//...
}