Segue 错误 - 未能在 nsmanagedobject 类上调用指定的初始化程序

Posted

技术标签:

【中文标题】Segue 错误 - 未能在 nsmanagedobject 类上调用指定的初始化程序【英文标题】:Segue error - failed to call designated initializer on nsmanagedobject class 【发布时间】:2015-06-24 06:43:55 【问题描述】:

在 tableview 控制器 #1 中,我在 viewDidLoad 中初始化了一个 NSManagedObjects 数组(名为“Date”的实体)。 var datesArray = [Date]()。我使用这个数组来填充表格数据。

当用户选择一个单元格时,我想通过索引路径将选定的Date 对象传递给视图控制器#2,一个详细信息视图。这就是我在prepareForSegue 中为 tableview 控制器 #1 提供的内容:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    let selectedIndexPath = tableView.indexPathForSelectedRow()
    if segue.identifier == "ShowDateDetails" 
        let dateDetailsVC = segue.destinationViewController as! DateDetailsVC
        dateDetailsVC.date = datesArray[selectedIndexPath!.row] as Date
    

在视图控制器 #2 中,我有一个简单的 var date = Date() 属性。

当我在表格视图中选择一行时,它在dateDetailsVC.date = datesArray[selectedIndexPath!.row] as Date 上崩溃并出现错误:

CoreData:错误:无法调用 NSManagedObject 类“DateAid.Date”上的指定初始化程序

谁能指导我找到解决方案,或者用半外行的术语解释为什么会发生这种情况的原因?我想避免在视图控制器 #2 中执行获取请求,除非那是不可能的。就上下文而言,我的核心数据技能目前是 1.5/5。

【问题讨论】:

你如何填充你的“datesArray”? 通过对传播的托管对象上下文的获取请求。由于我在视图控制器 #1 'datesArray' 中有所有日期,我希望不必在视图控制器 #2 中再次获取它们。 好的,你是如何在 dateDetailsVC 中声明日期的?我有一个想法.. var date = Date() 作为 dateDetailsVC 中的变量属性 【参考方案1】:

看看这个答案

https://***.com/a/25505878/2382237

也许你应该像这样声明日期:

var date: Date?

还有一些重构:

 dateDetailsVC.date = datesArray[selectedIndexPath!.row] as? Date

【讨论】:

以上是关于Segue 错误 - 未能在 nsmanagedobject 类上调用指定的初始化程序的主要内容,如果未能解决你的问题,请参考以下文章

在视图控制器之间进行 segue 时出现致命错误

带有大标题的导航栏上的动画segue错误

Swift 致命错误:在 segue 上展开 Optional 值时意外发现 nil

Segue 错误 objc

Segue 使用错误的动画和后退按钮未显示 [关闭]

通过 Segue 传递数据和一些错误