无法调用指定的初始化上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
最简单的方法是这样的:
- 在applicationDelegate定义范围内的参考
- 实例化通过传递变量的变量
在AppDelegate中(方括号外):
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
并在代码:
let firstEntity = FirstEntity(context:context)
现在,你有你的实体创建。但不要忘记保存:
appDelegate.saveContext()
嗨,谢谢你的回应。如果我出于某种原因这样做,代码'firstEntity.firstAttribute'将不起作用。我将如何使用您的代码引用每个实体中的属性? – Harish
太棒了,它工作:)。 – Harish