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

问题描述:

我真的一直停留在这个问题上,我都提到this计算器后,但我的应用程序仍与问题崩溃了:无法调用指定的初始化上NSManagedObject类 - CoreData

没有打电话指定的初始化对NSManagedObject类

所以,我有多个实体,我已经子类NSManagedObject。让我们假装我有一个实体:FirstEntity, SecondEntity, ThirdEntity, Fourth Entity, FifthEntity.让我们假装在每个实体中有两个属性firstAttribute, secondAttribute。我进入xcdatamold打开编辑器,然后为我的所有实体选择创建NSManagedObject子类。然后我想实例化这些新的NSManagedObject子类,以便我可以访问FirstEntity中的属性。所以我写了这个代码:

let firstEntity = FirstEntity() 

然后当我运行它崩溃的应用程序,所以我从计算器后暗示进一步编辑它,现在这是我的代码:

let firstEntityName = NSEntityDescription.entityForName("FirstEntity", inManagedObjectContext: managedObject) 

let firstEntity = FirstEntity.init(entity: firstEntity!, insertIntoManagedObjectContext: managedObject) 

然而,我的代码仍然崩溃。我真的无能为力,因为所有与上述问题有关的堆栈溢出帖子都说了,但我的代码是仍然一起崩溃无法在NSManagedObject类上调用指定初始化程序错误。

有什么建议吗?

您不应该通过初始化程序自己创建托管对象。相反,您可以调用NSEntityDescription的insertNewObjectForEntityForName:inManagedObjectContext:函数。沿线:

let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) 

上面设置firstEntity作为NSManagedObject的一个实例。假设你已经创建了通过界面生成器FirstEntity子类NSManagedObject的,你可以改用:

let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) as! FirstEntity 
firstEntity.firstAttribute = // Whatever 
+0

嗨,谢谢你的回应。如果我出于某种原因这样做,代码'firstEntity.firstAttribute'将不起作用。我将如何使用您的代码引用每个实体中的属性? – Harish

+0

太棒了,它工作:)。 – Harish

最简单的方法是这样的:

  • 在applicationDelegate定义范围内的参考
  • 实例化通过传递变量的变量

在AppDelegate中(方括号外):

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

并在代码:

let firstEntity = FirstEntity(context:context) 

现在,你有你的实体创建。但不要忘记保存:

appDelegate.saveContext()