核心数据:一旦使用上下文保存托管对象,如何撤消操作

时间:2013-02-07 06:43:25

标签: cocoa-touch core-data undo

我正在尝试从服务器上的几个表中实现批量数据的下载。

在我的情况下,有16个表。对于所有这些表,我将向服务器发出10个请求。这意味着我已经为相关表做了一些逻辑分组,但它就像所有表通过一个或另一个关系相互关联。

我在下载时需要考虑三个案例:

  1. 将数据保存到本地的每个表格。
  2. 管理插入对象之间的关系。
  3. 在下载过程中其中一个请求失败时处理情况,例如第8个请求失败。
  4. 我将针对每个回复采用这种方法:

    1. 在托管对象上下文中插入数据。
    2. 通过触发NSPredicate并关联相关对象来管理关系。
    3. 保存上下文。
    4. 如果响应失败,我有两个选择:

      1. 下次从失败的回复继续。
      2. 将所有已保存的数据恢复为之前的状态。
      3. 第一种方法可能导致一些数据不一致,所以我采用第二种方法。

        我知道如果未保存托管对象上下文,我们可以还原更改,但

          

        如果托管对象上下文是,则可以还原更改   保存?

        我需要社区提供一些有用的答案。

        请建议。

1 个答案:

答案 0 :(得分:1)

如果保存了托管对象上下文,是否可以还原更改?

保存后?也许吧,但这可能很棘手。如果为网络操作设置单独的托管对象上下文,并为其指定NSUndoManager,则可以稍后告诉撤消管理器将所有内容回滚到之前的状态。

但是,在你完成之前不要保存更改会更简单。使用撤销管理器实际上并没有多大帮助 - 存储所有撤消操作所需的内存至少会与内存使用相匹配,从而保留所有未保存的更改,直到完成为止。如果您正在处理单独的托管对象上下文(无论是子上下文还是完全独立的上下文),处理错误情况就像让MOC在不保存更改的情况下取消分配一样简单。