无法在NSManagedObject类 - CoreData上调用指定的初始化程序

时间:2016-02-27 01:07:42

标签: swift core-data nsmanagedobject

我真的被困在这个问题上,我已经提到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类上调用指定初始化程序错误。

有什么建议吗?

2 个答案:

答案 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)

最简单的方法是:

  • 在applicationDelegate中定义上下文的引用
  • 通过传递上下文
  • 来实例化变量

在AppDelegate中(括号外):

let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext

在代码中:

let firstEntity = FirstEntity(context:context)

现在您已创建了您的实体。但不要忘记保存:

appDelegate.saveContext()