我正在尝试设置一个撤消组,该组涵盖平移手势识别器期间发生的全部更改。正在修改的对象是Core Data的NSManagedObjects。
当手势进入“开始”阶段时,代码会启动撤消组并关闭按事件分组。在“结束”和“取消”阶段,组结束并按事件分组重新开启。
在识别器的每个“更改”上,更新相同的核心数据对象。随后,Core Data为该特定更改创建新的撤消组。
有什么方法可以让核心数据停止吗?或者我是否需要更改在这种情况下处理撤消的方式?
我有一个示例项目here,其中包含BBQMainViewController.m的handlePanGesture:方法(第82行)中的相关代码。项目在识别器的每次更新时向控制台打印撤消堆栈。如您所见,撤消堆栈构建和构建。如果您注释掉第168行,则撤消堆栈不会累积。
答案 0 :(得分:0)
由于您每次通过手势识别器周期修改相同的NSManagedObject
(好吧,无论如何在最终的else
子句中),为什么不缓存该值并将对象的值设置为一次UIGestureRecognizerStateEnded
?
可能(并且我 足够的核心数据专家确切知道)核心数据明确为每个更改创建一个新的撤消组级别(至少对于同一个对象)在图表中),无论您的setGroupsByEvent:
设置如何。
答案 1 :(得分:0)
事实证明,我看到的问题实际上是由我正在努力在撤消后正确更新UI的应用程序引起的。
在手势开始时创建撤消组,然后在结束时关闭它或取消状态包装核心数据在recogizer更改状态更新期间创建的所有撤消组。撤消管理器上的撤消调用撤消整个组,包括由Core Data创建的嵌套组。
简而言之:用户错误。像往常一样。