Arl*_*son 7 cocoa core-data nsundomanager nsmanagedobject nsmanagedobjectcontext
我正在研究一个核心数据应用程序,它具有相当大的托管对象层次结构,类似于树.
创建基础对象时,它会创建一些子对象,这些子对象又创建自己的子对象,依此类推.这些子对象中的每一个都可以使用NSURLConnections收集信息.
现在,我想在managedObjectContext中使用undoManager支持undo/redo.问题是,如果用户创建基础对象,然后尝试撤消该操作,则不会删除基础对象.相反,可以移除一个或多个子对象.显然,这种行为是不可预测的,也是不受欢迎的.
所以我尝试默认禁用撤消注册.我通过disableUndoRegistration:在managedObjectContext中修改任何内容之前调用来完成此操作.然后,在基本操作(例如创建基础对象)之前启用撤销注册,再次重新禁用后续注册.
现在,当我尝试撤消时,我收到此错误:
undo:NSUndoManager 0x1026428b0处于无效状态,使用过多的嵌套撤销组调用undo
思考?
NSUndoManager等待下一个运行循环周期,直到它注册您的更改
// do your stuff
// give the run loop a breath
[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate:[NSDate date]];
[undoManager disableUndoRegistration];
Run Code Online (Sandbox Code Playgroud)
自这个问题发布以来已经一年多了,但无论如何这里是一个答案:
您应该查看苹果的文档,它说:
.. 撤消消息关闭最后打开撤消组,然后在该组中所有应用的撤销操作...如果任何未关闭,撤销嵌套组都在堆栈上被调用撤销时,它抛出一个异常.要撤消嵌套组,必须使用endUndoGrouping消息显式关闭组,然后使用undoNestedGroup撤消它.
| 归档时间: |
|
| 查看次数: |
3187 次 |
| 最近记录: |