【问题标题】:Fetch relationship of deleted entity. (Crash)获取已删除实体的关系。 (碰撞)
【发布时间】:2016-11-19 18:07:47
【问题描述】:

在应用启动时,我正在后台线程中删除旧的 CoreData 行,下面是我拥有的代码。我的问题类似于 City-Streets 问题。所以,我有两个实体,街道和城市,我有一个关系城市 > 街道,因为一个城市有很多街道。

我在 Crashlytics 上遇到了罕见的崩溃,就在下面的代码中说明的地方。崩溃从未发生在我身上,我无法复制它。我不确定问题是否在于我们不应该获取已删除实体的关系。有人可以给我一些解释或重现问题的步骤吗? (我想确定是不是这个原因)

context.performBlock{
    //fetch the entities I want to delete
    let streets = fetchEntitiesToDeleteInContext(context) 

    for street in streets{
        context.deleteObject(street)

        let city: City = street.city // NO crash here
        let cityName: String = city.name //crash here but I am sure that name is not nil
    }
}

【问题讨论】:

    标签: ios swift core-data nsmanagedobjectcontext


    【解决方案1】:

    您可以在删除一条街道之前获取城市对象。

    此外,您的代码没有任何意义。您在 for 循环的范围内定义变量,而不是使用它们。 - 但你解释说这只是摘录。

    请注意,该行为是未定义,因此不能保证崩溃。无需担心它以前为什么有效。

    【讨论】:

    • 实际上代码更复杂,所以我在 for 循环中使用变量。当我遇到那次崩溃时,我注意到我应该按照你说的那样做,但是为什么崩溃从来没有发生在我身上,为什么它在 city.name 而不是在 deletedObject.city 上崩溃?
    • 这被称为“误报”。很明显,如果你做了一些没有预见到的事情,结果是undefined。所以它不是保证崩溃。 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    相关资源
    最近更新 更多