可可 – NSUndoManager,核心数据和选择性撤消重做

可可 – NSUndoManager,核心数据和选择性撤消重做,第1张

概述我正在研究一个核心数据应用程序,它具有相当大的托管对象层次结构,类似于树. 创建基础对象时,它会创建一些子对象,这些子对象又创建自己的子对象,依此类推.这些子对象中的每一个都可以使用NSURLConnections收集信息. 现在,我想在managedObjectContext中使用undoManager支持undo / redo.问题是,如果用户创建基础对象,然后尝试撤消该 *** 作,则不会删除基础对 我正在研究一个核心数据应用程序,它具有相当大的托管对象层次结构,类似于树.

创建基础对象时,它会创建一些子对象,这些子对象又创建自己的子对象,依此类推.这些子对象中的每一个都可以使用NSURLConnections收集信息.

现在,我想在managedobjectContext中使用undoManager支持undo / redo.问题是,如果用户创建基础对象,然后尝试撤消该 *** 作,则不会删除基础对象.相反,可以移除一个或多个子对象.显然,这种行为是不可预测的,也是不受欢迎的.

所以我尝试默认禁用撤销注册.我通过调用disableundoRegistration执行此 *** 作:在managedobjectContext中修改任何内容之前.然后,在基本 *** 作(例如创建基础对象)之前启用撤销注册,再次重新禁用注册后的注册.

现在,当我尝试撤消时,我收到此错误:

undo: NSUndoManager 0x1026428b0 is in
invalID state,undo was called with
too many nested undo groups

思考?

解决方法 NSUndoManager等待下一个运行循环周期,直到它注册您的更改

// do your stuff// give the run loop a breath[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate:[NSDate date]];[undoManager disableundoRegistration];
总结

以上是内存溢出为你收集整理的可可 – NSUndoManager,核心数据和选择性撤消/重做全部内容,希望文章能够帮你解决可可 – NSUndoManager,核心数据和选择性撤消/重做所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1020439.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存