NSUndoManager、核心数据和选择性撤消/重做

2024-02-02

我正在开发一个核心数据应用程序,该应用程序具有相当大的托管对象层次结构,类似于树。

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

现在,我想使用 ManagedObjectContext 中的 undoManager 支持撤消/重做。问题是,如果用户创建一个基础对象,然后尝试撤消该操作,则该基础对象不会被删除。相反,可以移除一个或多个子对象。显然,这种类型的行为是不可预测的并且是不需要的。

所以我尝试默认禁用撤消注册。我通过调用做到了这一点disableUndoRegistration:在 ManagedObjectContext 中进行任何修改之前。然后,在创建基础对象等基本操作之前启用撤消注册,然后再次重新禁用注册。

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

撤消:NSUndoManager 0x1026428b0 位于 无效状态,调用撤消 嵌套撤消组过多

想法?


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

// do your stuff

// give the run loop a breath

[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate:[NSDate date]];
[undoManager disableUndoRegistration];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSUndoManager、核心数据和选择性撤消/重做 的相关文章

随机推荐