核心数据错误 - 语句仍处于活动状态 - 在主线程中

时间:2016-04-12 15:06:17

标签: ios swift debugging core-data

App首次运行模拟器,但是一旦将新数据保存到Core Data,应用程序将无法再次启动 - 在第一个视图加载未捕获的异常之前崩溃' NSInternalInconsistencyException',原因:&# 39;声明仍然有效#39;控制台中有75行预碰撞动作,但没有什么突出的(对我不熟练的眼睛)。

如果删除,可以重复启动应用程序,直到新数据保存到Core Data。保存新数据后,仅停止运行应用程序或退出模拟器无效,它在启动期间仍会崩溃。

Stackoverflow和apple doc.s一致表明它与线程有关,但我的代码有点简单 - 一切都在主线程上。我喜欢在迅速或迅速的过程中找到要尝试的东西来确定原因/解决方案。

我在AppDelegate类中使用默认的xcode 7核心数据堆栈。样本数据最初以一种方法加载到Core Data中,然后从核心数据成功加载。保存新记录后,(不重新启动)从Core Data成功加载新添加的数据。问题只发生在重新启动时。

在代码中,当实例化新的记录视图控制器时,我在prepareForSegue方法中使用单独的实体实例化两个托管对象:

    if (segue.identifier == "UnwindSegue")
    {
        updateRecord()   // managed object properties updated

        do
        {
            try managedContext.save()       // commit changes / save context
        }
        catch
        {
            print("There is some error.")       // if error
        }
    }

在新记录视图控制器中,定义了托管对象属性值,并在展开时保存托管上下文。

start    end 
 1        5

当应用程序返回主视图时,新记录将从Core Data中获取并显示在表格上。

但是当我重新启动应用程序时 - 悲伤。

1 个答案:

答案 0 :(得分:0)

我了解到,当苹果公司“沮丧”某些事情时,最好远离它。

enter image description here

根据doc.s将子类中的override init更改为awakeFromInsert修复它。感谢Markus S. Zarra。