使用父NSManagedObjectContext时更正工作流程

时间:2016-10-06 17:44:41

标签: ios objective-c iphone core-data

我使用NSManagedObjectContext链来表示可以回滚/取消的视图和操作的层次结构。 这是一个例子: 让我们说我有以下结构:

  • 客户端列表(主NSManagedObjectContext)
  • 客户详细信息(DetailContext - Parent = MainContext)
  • 客户端杂货(GroceryContext - Parent = DetailContext)
  • Grocery Payment(PaymentContext - Parent = GroceryContext)

这样,我可以导航到Grocery付款,进行更改,并在必要时取消所有其他级别的相同内容。由于执行保存会将更改升级。到目前为止,这是按预期工作的。

我想了解的是执行以下操作的好方法:

  • 在列表中打开客户端;
  • 打开杂货;
  • 打开杂货店付款记录
  • 添加交易

问题是,此事务也需要保存在后端,并保存在本地主上下文中,因为无论我在工作流的其余部分执行什么操作,都会进行该事务。

我一直在做的是,在进行事务的情况下,将调用一系列代表,直到作为所有的父上下文的根级别,并保存事务。但我想知道是否有更好的方法来做到这一点。因为即使事务已完成,我也可能想要取消在此过程中所做的其他一些更改。但是所有这些上下文都需要为事务保存上下文的更新对象,因为这是最终的。

请不要了解客户杂货的实际使用情况,这只是为了解释上下文的层次结构。

由于

1 个答案:

答案 0 :(得分:0)

使用所有这些嵌套的子上下文几乎肯定是错误的方法。在大多数情况下,您只需要在主线程上使用一个主要上下文,但是如果您有一大堆更改,只有在完成并保存在一起时才有意义,那么您可以使用临时子上下文。保存子上下文时,立即保存主上下文以将其上载到磁盘上。把它想象成数据库事务。

如果您从后台进程进行了更改,您可以直接从持久性存储协调器创建私有子上下文或完全独立的私有上下文 - 您必须在第二种情况下手动将更改合并到主上下文中虽然。请使用managedObjectContextDidSaveNotification: