如何防止子托管对象上下文停止应用程序?

时间:2018-06-28 17:28:54

标签: swift core-data

我想将childContext(NSManagedObjectContext)用于详细视图,用户可以在其中编辑模型的参数。这个想法是,除非用户保存了详细视图,否则我可以简单地删除所有更改。如果他们确实保存了更改,则可以将更改传播到parentContext。

正在发生的事情是,当我使用以下代码执行生成childContext和NSManagedObject副本的代码时,正在消耗100%的CPU。

在没有childContext方法的情况下,该应用程序可以正常运行,但我还想观察childContext的更改,以使详细视图UI保持最新。因此,我需要一个childContext,而且应该可以正常工作,所以我必须缺少一些东西。

任何人都可以建议发生这种情况的原因以及如何处理吗?

    DispatchQueue.main.async {
        let childContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
        childContext.parent = childContext
        let childEntry = childContext.object(with: foodEntry.objectID) as? FoodEntry
        addFoodVC.foodEntry = childEntry
        addFoodVC.context = childContext
        self.navigationController?.pushViewController(addFoodVC, animated: true)
    }

1 个答案:

答案 0 :(得分:1)

我猜想当您尝试获取对象时,此行childContext.parent = childContext会导致无限递归循环。

尝试使用应用的主上下文而不是子上下文本身来设置父。