调用 NSManagedObject 类上的指定初始化程序失败 - CoreData
Posted
技术标签:
【中文标题】调用 NSManagedObject 类上的指定初始化程序失败 - CoreData【英文标题】:Failed to call Designated Initializer on NSManagedObject Class -- CoreData 【发布时间】:2016-02-27 01:07:41 【问题描述】:我真的被这个问题困住了,我参考了this *** 帖子,但我的应用程序仍然因这个问题而崩溃:
在 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 类上调用指定初始化程序而崩溃 strong> 错误。
有什么建议吗?
【问题讨论】:
【参考方案1】:您不应该通过初始化程序自己创建托管对象。相反,您调用 NSEntityDescription 的 insertNewObjectForEntityForName:inManagedObjectContext:
函数。大致如下:
let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject)
上面将firstEntity设置为NSManagedObject的一个实例。假设您已经通过 Interface Builder 创建了 NSManagedObject 的 FirstEntity
子类,您可以改为使用:
let firstEntity = NSEntityDescription.insertNewObjectForEntityForName("FirstEntity", inManagedObjectContext: managedObject) as! FirstEntity
firstEntity.firstAttribute = // Whatever
【讨论】:
您好,感谢您的回复。如果我出于某种原因这样做,代码firstEntity.firstAttribute
将不起作用。我将如何使用您的代码引用每个实体中的属性?【参考方案2】:
最简单的方法是这样的:
在 applicationDelegate 中定义上下文的引用 通过传递上下文来实例化变量在 AppDelegate 中(括号外):
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
在代码中:
let firstEntity = FirstEntity(context:context)
现在您已经创建了实体。但不要忘记保存:
appDelegate.saveContext()
【讨论】:
以上是关于调用 NSManagedObject 类上的指定初始化程序失败 - CoreData的主要内容,如果未能解决你的问题,请参考以下文章
为关系内部的属性设置值时“无法调用 NSManagedObject 类上的指定初始化程序”(核心数据)
segueing 时的核心数据错误:无法在 NSManagedObject 类上调用指定的初始化程序
segueing时出现核心数据错误:无法在NSManagedObject类上调用指定的初始值设定项
CoreData:错误:无法在 NSManagedObject 类上调用指定的初始化程序