我真的被困在这个问题上,我已经提到this stackoverflow帖子,但我的应用程序仍然崩溃了问题:
无法在NSManagedObject类
上调用Designated Initializer
所以,我有多个实体,我已经将NSManagedObject
子类化了。让我假装我有一个名为FirstEntity, SecondEntity, ThirdEntity, Fourth Entity, FifthEntity.
的实体让我们假装我在每个实体中都有两个名为firstAttribute, secondAttribute
的属性。我进入xcdatamold
打开了编辑器,然后为我的所有实体选择了创建NSManagedObject子类。然后我想要实例化每个新的NSManagedObject
子类,以便我可以访问FirstEntity
中的属性。所以我写了这段代码:
let firstEntity = FirstEntity()
然后,当我运行应用程序时,它会崩溃,所以我使用stackoverflow帖子中的提示进一步编辑它,现在这是我的代码:
let firstEntityName = NSEntityDescription.entityForName("FirstEntity", inManagedObjectContext: managedObject)
let firstEntity = FirstEntity.init(entity: firstEntity!, insertIntoManagedObjectContext: managedObject)
但是,我的代码仍在崩溃。我真的很无能为力,因为所有与该问题有关的堆栈溢出帖都说上面做了,但是我的代码仍然崩溃无法在NSManagedObject类上调用指定初始化程序错误。
有什么建议吗?
答案 0 :(得分:4)
您不应该通过初始化程序自己创建托管对象。相反,您调用NSEntityDescription的let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject)
函数。沿着:
FirstEntity
以上将firstEntity设置为NSManagedObject的一个实例。假设您已通过Interface Builder创建了NSManagedObject的let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) as! FirstEntity
firstEntity.firstAttribute = // Whatever
子类,您可以使用:
{{1}}
答案 1 :(得分:1)
最简单的方法是:
在AppDelegate中(括号外):
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
在代码中:
let firstEntity = FirstEntity(context:context)
现在您已创建了您的实体。但不要忘记保存:
appDelegate.saveContext()