代码之家  ›  专栏  ›  技术社区  ›  aaronium112

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

  •  1
  • aaronium112  · 技术社区  · 8 年前

    我想使用childcontext(nsmanagedobjectcontext)作为一个细节视图,用户可以在其中编辑模型的参数。其思想是,除非用户保存详细视图,否则我可以简单地放弃任何更改。如果他们保存了更改,我可以将更改传播到parentcontext。

    发生的事情是,当我使用下面的代码执行生成子上下文和nsmanagedobject副本的代码时,100%的cpu都被消耗掉了。

    该应用程序在没有childcontext方法的情况下运行良好,但我也希望观察childcontext的更改,以保持详细视图ui是最新的。所以我需要一个孩子的背景,再加上这个应该有用,所以我一定漏掉了一些东西。

    有人能告诉我为什么会发生这样的事以及该怎么办吗?

        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 回复  |  直到 8 年前
        1
  •  1
  •   Peba    8 年前

    我猜这句台词 childContext.parent = childContext 在尝试获取对象时导致无限递归循环。

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