添加超过 5 个相关对象时核心数据应用程序崩溃

core data app crash when adding more than 5 related objects

我有两个核心数据实体,每个实体都与另一个存在一对多关系。我正在使用 tableView 来允许用户 select 哪些 wageClasses 与给定的提案相关。该项目是 Swift 3,iOS 10.2.1,我正在使用编辑器菜单中的 NSManagedObject 子类。

这一切都很好,直到我尝试将第六个 wageClass 添加到提案中。 注意:如果我尝试将前 5 个以外的任何值添加到 WageClass 数组中,它就会崩溃。但是当我打印数组时,它会打印与数组中一样多的值。 应用程序崩溃并出现错误:在展开可选值时意外发现 nil。

我也遇到了线程 1:EXC_BREAKPOINT 错误,但是断点导航器和 lldb 没有列出任何断点。

我已经通过尝试单独添加 wageClasses,通过以不同的顺序添加它们,以及通过创建最多十个 wageClasses 来测试这个(看看最后创建的 wageClass 是否没有加载到 tableView) 但运气不好,我得到了相同的结果。

这是我要添加的地方:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "AddWageClassCell", for: indexPath)

    let wageClass = wageClasses[indexPath.row]


    let wageClassStatus = wageClass.value(forKey: "checked") as? Bool ?? true

    cell.textLabel?.text = wageClass.value(forKey: "wageClassName") as? String

    var accessoryType = UITableViewCellAccessoryType.none
    var tintColor = UIColor.clear

    if (wageClassStatus) {
        accessoryType = UITableViewCellAccessoryType.checkmark
        tintColor = UIColor.green

    }

    cell.accessoryType=accessoryType
    cell.tintColor = tintColor


    return cell

}

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
    {


        let wageClassObject = self.wageClasses[indexPath.row]

        var wageClassStatus = wageClassObject.value(forKey: "checked") as? Bool ?? false

        wageClassObject.setValue(!wageClassStatus, forKey:"checked")





        proposalToEdit?.addToWageClasses(wageClassObject)




        do {
            try 
            ad.saveContext()
        } catch let error as NSError {
            print("Cannot save object: \(error), \(error.localizedDescription)")
        }

        tableView.deselectRow(at: indexPath,animated:false)

        tableView.reloadRows(at: [indexPath], with: .none)






    }

感谢您的评论!

我终于意识到,当我在一个单独的 xib 上的一个单独的 tableView 上用 wageClasses 格式化一个单元格时,我是在强制展开一个变量。当我将其包装在 if let 语句中时

  if let cell = tableView.cellForRow(at: indexPath) as? WageCell {
                 configureCell(cell: cell, indexPath: indexPath as NSIndexPath)
            } else {
                print("something is nil")
            }

            }

崩溃消失了。