核心数据撤消合并以跨越多个运行循环周期的操作

时间:2010-07-21 14:58:18

标签: core-data undo nsundomanager

我有一个基于Core Data的UIKit应用程序,允许用户在屏幕上拖动对象。在拖动对象时,我会在每个touchesMoved:事件上更新其position属性。为了支持一次撤消拖动操作,我在拖动开始时启动一个新的撤消组,并在用户抬起他们的手指时结束该组。

为了节省内存并快速执行撤消操作,我希望合并属于拖动操作的撤消数据,但Core Data使这很困难。问题是在每个运行循环周期结束时调用processPendingChanges,并强制Core Data为该迭代中发生的位置更改提交新的撤消记录。拖动操作可以轻松累积数百个这样的撤销记录,所有这些记录都是不必要的。

我有没有办法继续使用Core Data的神奇内置撤消支持,但不会在这些重复的撤消记录上浪费宝贵的内存?我喜欢我不需要关心在撤消/重做操作中维护对象图的一致性,但是无法正确处理这些连续属性更新似乎是一个显而易见的事。

2 个答案:

答案 0 :(得分:3)

我认为设置撤消管理员setGroupsByEvent:会做你想要的。

  

设置指定的布尔值   接收器是否自动   组在运行期间撤消操作   环。如果是,则接收者创建   撤消每次传递的组   运行循环;如果不是的话。

更简洁的解决方案可能是在拖动事件结束之前不将对象位置提交到数据模型。

答案 1 :(得分:0)