通常在单线程应用程序中,主要托管对象上下文将驻留在AppDelegate中,我们将通过appDelegate.mainMOC访问它。但是现在Apple推出了嵌套上下文(父母和孩子),they're recommending“传递接力棒”方法:
嵌套上下文比以往任何时候都更重要 “传递接力棒”访问上下文的方法(通过传递上下文 从一个视图控制器到下一个视图控制器而不是检索它 直接来自应用程序代理。
但我真的没有看到引入嵌套上下文如何使它“比以往更重要”。为什么我不能在AppDelegate(masterMOC,mainMOC,extraMOC)中只有三个上下文?那会有什么问题,为什么Apple推荐反对这种方法?
答案 0 :(得分:3)
首先在应用代理中拥有所有这些是一个坏主意。它打破了各种软件设计规则。
话虽如此,我们的想法是,您不希望必须在必须确切知道哪些上下文的地方编写代码。使用您提出的解决方案,所有代码都必须知道使用moc1,moc2或者moc3。那非常脆弱。
理想情况下,您将MOC传递给代码,该代码使用它给出的MOC。如果它需要创建一个划痕,它可以创建一个传递给它的MOC的子节点(当然,假设MOC不是限制类型)。
一种方法是传递对象,而不用担心确切的MOC。只需在必要时查询托管对象的managedObjectContext属性。
请注意,将内容保留在app委托中意味着您将其用作“厨房接收器”,并且在某些方面,它只是美化全局变量。
顺便说一下,它“比以往任何时候都更重要”,因为更新的线程策略更严格,如果你的线程错误,你的代码几乎可以保证会死于可怕的死亡。