我想了解/复制NSUndoManger
的“运行循环传递/循环组”功能:
NSUndoManager
可以将对registerUndo()
的多个调用分组为单个“撤消”操作。这由NSUndoManager.groupsByEvent
确定,默认设置为true
。
这样的事情:
// User clicks button... (causes a new run loop event)
undoManager.registerUndo(...) // #1
undoManager.registerUndo(...) // #2
...导致一个撤消组并单击编辑→撤消立即恢复两个更改。
不知何故,NSUndoManager可以判断对registerUndo()
的两次调用是否在同一个运行循环周期内。这是如何工作的?
我的用例:
我有代码在用户与UI交互后发送属性更改通知(例如,单击按钮)。作为用户操作的结果,可以有一个或多个事件。我想将这些分组并在当前运行循环结束时仅更新一次UI。
答案 0 :(得分:1)
NSUndoManager通常在运行循环期间自动创建撤消组。第一次要求在运行循环中记录撤消操作时,它会创建一个新组。然后,在循环结束时,它会关闭该组。
NSUndoManager
是与NSRunLoop
相同的框架的一部分,因此NSRunLoop
可能会NSUndoManager
发出信号以关闭群组。你不知道,你不应该知道。