CoreData:错误:无法在创建时调用 NSManagedObject 类上的指定初始化程序
Posted
技术标签:
【中文标题】CoreData:错误:无法在创建时调用 NSManagedObject 类上的指定初始化程序【英文标题】:CoreData: error: Failed to call designated initializer on NSManagedObject class failing on create 【发布时间】:2015-08-31 09:56:54 【问题描述】:我查看了其他问题并尝试了他们的解决方案,但错误仍然存在。
另外,这是我的第一个 ios 项目,所以请像我五岁一样解释>.
好的,所以我有一个日记条目实体,看起来像这样:
import Foundation
import CoreData
class DiaryEntry: NSManagedObject
@NSManaged var title: String
@NSManaged var text: String
@NSManaged var date: NSDate
@NSManaged var extra: String
@NSManaged var backup: NSNumber
还有,我有一个像这样的 DAO 文件(删节) 进口基金会 导入核心数据
class coreDataDao : NSManagedObject, DiaryDAO
func createEntry(title:String,text:String,date:NSDate,backup:NSNumber,extra:String)
let newItem = NSEntityDescription.insertNewObjectForEntityForName("DiaryEntry", inManagedObjectContext: self.managedObjectContext!) as! DiaryEntry
newItem.title=title
newItem.text=text
newItem.date=date
newItem.extra=extra
newItem.backup=backup.integerValue
最后,在我的视图控制器中调用,我有这个功能:
let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
func jTest()
var dao = coreDataDao()
dao.createEntry("a title",text:"some text", date: NSDate(), backup: 2, extra: "extras")
但是当代码运行时,我得到以下错误:
MyApp[9786:438760] CoreData: error: Failed to call designated initializer on NSManagedObject class 'MyAppName.coreDataDao'
fatal error: unexpectedly found nil while unwrapping an Optional value
我整天都在尝试,包括大多数关于此错误的 SO 解决方案,但我无法继续。提前致谢
【问题讨论】:
【参考方案1】:这里的关键是
在展开可选值时意外发现 nil
也许您的备份或 backup.integer 或任何其他分配的值为零。请调试检查。
【讨论】:
你可以看到我是如何传递它的,它是硬编码的。也许是日期对象。正在调试中。 很有趣...所以我注释掉了 DOA 文件中的所有内容,并用 println 替换它来调试数据。数据完全符合预期。但是,错误仍然存在....致命错误消失了,但核心数据错误仍然存在。我没有意识到读数中有 2 个错误... DiaryDAO 是什么?为什么要从 NSManagedObject 继承 coreDataDao? 它正在实现一个协议。我们的前端大师设置它并让我做数据库基础工作 将 class coreDataDao : NSManagedObject, DiaryDAO 改为 class coreDataDao : DiaryDAO 然后告诉我。【参考方案2】:解决方案原来是处理 ManagedObjectContext。当它需要从 ViewController 传递时,我试图在我的 DAO 文件中生成它。
道
class func createEntry(title:String,context:NSManagedObjectContext)->DiaryEntry
if let newItem = NSEntityDescription.insertNewObjectForEntityForName("DiaryEntry", inManagedObjectContext: context) as? DiaryEntry
和视图控制器
coreDataDao.createEntry("a title",context: self.managedObjectContext!)
【讨论】:
以上是关于CoreData:错误:无法在创建时调用 NSManagedObject 类上的指定初始化程序的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionView DataSource 方法未在 CoreData 更改时调用