【问题标题】:Is there a way to view the undo stack?有没有办法查看撤消堆栈?
【发布时间】:2009-10-15 08:09:04
【问题描述】:

我正在学习撤消,我想要一种方法来查看 undoManager 中的撤消对象 (NSInvocations),以便了解发生了什么。我在文档中看不到这样的内容,但也许有人知道方法。

谢谢。

【问题讨论】:

    标签: objective-c cocoa macos undo


    【解决方案1】:

    你可以使用

    class-dump -C NSUndo /System/Library/Frameworks/Foundation.framework/Foundation
    

    了解撤消相关类的内部结构。你会发现 NSUndoManager 有两个名为 _undoStack 和 _redoStack 的实例变量。它的结构非常明显,因此您可以编写一个打印堆栈的小方法。我发现这对于调试撤消相关问题非常方便。

    【讨论】:

    【解决方案2】:

    您在使用核心数据吗? Core Data 提供自动撤消/重做支持。否则,NSUndoManager 将有一个空堆栈。

    我想我的问题是,为什么要查看堆栈?在实践中,确实没有理由必须查看撤消管理器的堆栈。如果您正在寻找有关如何创建撤消操作并将它们推送到堆栈上的建议,这里有一个 pretty good overview 来了解如何做到这一点。 Apple's documentation 的主题也相当不错。我特别喜欢基于调用的方法。

    【讨论】:

    • 我正在阅读“Mac OS X 的 Cocoa 编程”,其中有一章是关于使用撤消的。它还没有使用 Core Data。我想查看堆栈的原因只是想知道事情是如何工作的,这样我才能更好地理解它。我想检查实际发生的情况是否与我认为的情况相符。
    【解决方案3】:

    您可以打印您的撤消管理器的_undoStack 私有属性:

    let undoStack = object_getIvar(undoManager, class_getInstanceVariable(UndoManager.self, "_undoStack")!)
    
    print(undostack.debugDescription)
    

    基于this gist

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-13
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 2011-07-05
      • 1970-01-01
      相关资源
      最近更新 更多