Cocoa touch 核心数据:使用上下文保存托管对象后如何撤消操作

Cocoa touch 核心数据:使用上下文保存托管对象后如何撤消操作,cocoa-touch,core-data,undo,Cocoa Touch,Core Data,Undo,我正在尝试从服务器上的几个表下载批量数据 就我而言,有16张桌子。对于所有这些表,我将向服务器发出10个请求。这意味着我已经对相关表进行了一些逻辑分组,但这就像所有表都通过一个或另一个关系相互关联一样 下载时需要考虑三种情况: 在本地将数据保存到每个表 管理插入对象之间的关系 在下载过程中一个请求失败时的处理情况,例如第八个请求失败 我将在每次答复中采用这种方法: 在托管对象上下文中插入数据 通过触发NSPredicate并关联相关对象来管理关系 保存上下文 如果响应失败,我有两种选择: 下次从

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

就我而言,有16张桌子。对于所有这些表,我将向服务器发出10个请求。这意味着我已经对相关表进行了一些逻辑分组,但这就像所有表都通过一个或另一个关系相互关联一样

下载时需要考虑三种情况:

  • 在本地将数据保存到每个表
  • 管理插入对象之间的关系
  • 在下载过程中一个请求失败时的处理情况,例如第八个请求失败
  • 我将在每次答复中采用这种方法:

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

  • 下次从失败的响应继续
  • 将所有保存的数据恢复到其以前的状态
  • 第一种方法可能会导致数据不一致,所以我选择第二种方法

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

    如果托管对象上下文为空,是否可以还原更改 拯救

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


    请建议

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

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


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

    嗨,Tom,thanx,谢谢您的回复:-)。。我还有一个问题:假设我决定保存所有内容,比如在第10次(在我的例子中是最后一次)响应结束时,考虑到数据量,托管对象上下文是否会消耗大量内存?可能会,这取决于导入的大小。但是保存更改后没有好的方法回滚更改。例如,没有检查点机制。如果您确实需要全部10个导入来实现数据完整性,那么您可能会遇到问题。也许您可以在开始导入过程之前测试它们?您可能还会发现苹果的这本指南很有用:再次感谢您的有用输入:-)