gpt4 book ai didi

cocoa - NSUndoManager.groupsByEvent 如何确定当前运行循环传递?

转载 作者:行者123 更新时间:2023-12-03 17:09:37 25 4
gpt4 key购买 nike

我想了解/复制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 一次。

最佳答案

NSUndoManager normally creates undo groups automatically during the run loop. The first time it is asked to record an undo operation in the run loop, it creates a new group. Then, at the end of the loop, it closes the group.

来源:Undo Operations and Groups

NSUndoManagerNSRunLoop 属于同一框架的一部分,因此也许 NSRunLoop 会向 NSUndoManager 发出关闭组的信号。你不知道,也不应该想知道。

关于cocoa - NSUndoManager.groupsByEvent 如何确定当前运行循环传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44084324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com