【发布时间】:2009-10-15 08:09:04
【问题描述】:
我正在学习撤消,我想要一种方法来查看 undoManager 中的撤消对象 (NSInvocations),以便了解发生了什么。我在文档中看不到这样的内容,但也许有人知道方法。
谢谢。
【问题讨论】:
标签: objective-c cocoa macos undo
我正在学习撤消,我想要一种方法来查看 undoManager 中的撤消对象 (NSInvocations),以便了解发生了什么。我在文档中看不到这样的内容,但也许有人知道方法。
谢谢。
【问题讨论】:
标签: objective-c cocoa macos undo
你可以使用
class-dump -C NSUndo /System/Library/Frameworks/Foundation.framework/Foundation
了解撤消相关类的内部结构。你会发现 NSUndoManager 有两个名为 _undoStack 和 _redoStack 的实例变量。它的结构非常明显,因此您可以编写一个打印堆栈的小方法。我发现这对于调试撤消相关问题非常方便。
【讨论】:
您在使用核心数据吗? Core Data 提供自动撤消/重做支持。否则,NSUndoManager 将有一个空堆栈。
我想我的问题是,为什么要查看堆栈?在实践中,确实没有理由必须查看撤消管理器的堆栈。如果您正在寻找有关如何创建撤消操作并将它们推送到堆栈上的建议,这里有一个 pretty good overview 来了解如何做到这一点。 Apple's documentation 的主题也相当不错。我特别喜欢基于调用的方法。
【讨论】:
您可以打印您的撤消管理器的_undoStack 私有属性:
let undoStack = object_getIvar(undoManager, class_getInstanceVariable(UndoManager.self, "_undoStack")!)
print(undostack.debugDescription)
基于this gist。
【讨论】: