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 类上的指定初始化程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在保存时调试 CoreData 崩溃?

UICollectionView DataSource 方法未在 CoreData 更改时调用

无法在正在进行内容生成时调用 StartAt

我不断收到此错误:“阅读器关闭时调用读取无效”

致命错误:未捕获的错误:在解析数据时调用字符串上的成员函数 find()

我是不是通过在启动时获取一个对象并在我想要持久化数据时调用 save 来正确使用 Core Data?