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

Har*_*ish 0 core-data nsmanagedobject swift

我确实一直在这个问题上停留,我已经提到了这个 stackoverflow帖子,但是我的应用程序仍然因该问题而崩溃:

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

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

let firstEntity = FirstEntity()
Run Code Online (Sandbox Code Playgroud)

然后,当我运行该应用程序时,它崩溃了,所以我用stackoverflow帖子中的提示对其进行了进一步编辑,现在这是我的代码:

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

let firstEntity = FirstEntity.init(entity: firstEntity!, insertIntoManagedObjectContext: managedObject)
Run Code Online (Sandbox Code Playgroud)

但是,我的代码仍然崩溃。我真的很无能为力,因为所有与该问题有关的堆栈溢出操作都可以完成上述操作,但是我的代码仍然崩溃,无法在NSManagedObject类错误上调用指定的初始化程序

有什么建议么?

Mic*_*ael 5

您不应自己通过初始化程序创建托管对象。而是,您调用NSEntityDescription的insertNewObjectForEntityForName:inManagedObjectContext:函数。遵循以下原则:

let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject)
Run Code Online (Sandbox Code Playgroud)

上面将firstEntity设置为NSManagedObject的实例。假设您已经FirstEntity通过Interface Builder 创建了NSManagedObject 的子类,则可以改为使用:

let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) as! FirstEntity
firstEntity.firstAttribute = // Whatever
Run Code Online (Sandbox Code Playgroud)