gpt4 book ai didi

ios - 在 mergeChangesFromContextDidSaveNotification 中同步上下文时核心数据崩溃 (EXC_BAD_ACCESS)

转载 作者:行者123 更新时间:2023-12-01 16:51:43 26 4
gpt4 key购买 nike

我正在编写一个很大程度上基于 CoreData 的 iPad cooking 应用程序。
在我的应用程序中,我有一个用于编辑配方的屏幕,其中包含 2 种类型的信息:

  • 带有配方类别\子类别和国家/地区的列表
  • 所有其他配方相关信息

  • 这个列表中的每一个都可以在弹出框中进行编辑。此列表的更改应立即保留(即,如果用户将某些配方类别添加到可能的类别列表中,但取消了配方创建,则该类别应适用于所有配方)。
    决定实现 2 个单独的 NSManagedObjectContexts 处理每种类型的信息: 主要内容用于食谱管理和 支持上下文 对于列表。

    通过 执行的所有核心数据操作神奇唱片框架。两个上下文都将 MagicalRecord 的默认上下文作为父上下文。每个上下文都会观察另一个上下文的变化。所有上下文都在 上创建和使用主线程 所以似乎这个问题与多线程问题无关。

    当我尝试在支持上下文中创建对象并在对象创建后立即在支持上下文中保持更改时,一切正常。当新创建的对象在创建后立即被删除时出现问题 - 收到 EXC_BAD_ACCES。
    但是,该实体正在正确持久化,并且在下次启动时可以使用和删除它而不会出现同步问题。

    1 注意:当从 访问对象时主要内容 通过 existingObjectWithID: NSManagedObjectContext 的方法可以删除这个对象。然而,崩溃发生在主上下文(主上下文和支持上下文的父上下文)保存时。

    这是我的代码:

    实体创建:
    RecipeCategory* category = [RecipeCategory MR_createInContext:_supportingContext];
    category.name = itemName;
    [_supportingContext MR_saveToPersistentStoreAndWait];

    实体删除:
    [(RecipeCategory*)itemToRemove MR_deleteEntity];
    [_supportingContext MR_saveToPersistentStoreAndWait];

    上下文创建和观察设置:
    [_mainContext MR_stopObservingContext:_supportingContext];
    [_supportingContext MR_stopObservingContext:_mainContext];
    _mainContext = [NSManagedObjectContext MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]];
    _supportingContext = [NSManagedObjectContext MR_contextWithParent:[NSManagedObjectContext MR_defaultContext]];
    [_mainContext MR_observeContextOnMainThread:_supportingContext];
    [_supportingContext MR_observeContextOnMainThread:_mainContext];

    请告知可能导致此问题的原因,因为现在我很困惑,即使我应该以哪种方式解决这个问题。 Core Data 文档中的变更管理部分没有给出任何内容。同样的结果给了谷歌。

    最佳答案

    不要那样做。一个上下文在观察另一个也在观察观察者......这很糟糕。您首先需要了解嵌套上下文的规则以及数据在保存时如何从一个上下文流向另一个上下文。

    在你的情况下,你可能想在 NSMOC 上查找 MR_confinementContext 方法。这将创建一个使用旧线程限制模型的上下文。这可以帮助您避免线程崩溃。但首先,不要进行循环观察……数据流入

    关于ios - 在 mergeChangesFromContextDidSaveNotification 中同步上下文时核心数据崩溃 (EXC_BAD_ACCESS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15093436/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com