cocoa - 如何在将状态推送到 NSUndoManager 后立即强制 NSDocument isDocumentEdited YES

标签 cocoa nsdocument nsundomanager

我将 NSDocument 与其 NSUndoManager 结合使用。 我注意到将可撤消操作推送到 UndoManager 时设置 NSDocument updateChangeCount 存在延迟:

[undoManager registerUndoWithTarget:self selector:@selector(applyUndoState:) object:state];
NSLog(@"Document.isEdited: %d", [self isDocumentEdited]);

如果文档在此调用之前未被修改,则将显示“0”。 似乎 undomanager 在该方法退出后一段时间后调用 updateChangeCount 。 有没有办法强制 undomanager 更新文档 updateChangeCount ? 我可以手动调用

if (![self isDocumentEdited]) 
  [self updateChangeCount:NSChangeDone];

但我不知道与撤消管理器交互是否安全。

最佳答案

NSUndoManager 自动对撤消事件进行分组,直到当前事件结束,此时它会关闭当前组并对其进行处理。

我不确定您将如何解决这个问题,因为我不确定您为什么希望 isDocumentEdited 立即更改。

关于cocoa - 如何在将状态推送到 NSUndoManager 后立即强制 NSDocument isDocumentEdited YES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21430409/

相关文章:

macos - 使用 NSUndoManager 和 .prepare(withInitationTarget :) in Swift 3

objective-c - UIView 和 UIImage 预加载

macos - 使用 NSDocument 检测被覆盖的文件

ios - 如何在iOS中执行撤消操作以存储UIGraphicsContext?

ios - 如何强制 NSUndoManagerprepareWithInitationTarget 保留它的参数?

objective-c - NSDocument 和键盘(如 keyDown)

objective-c - Cocoa 中的 keyUp/keyDown 问题

objective-c - cocoa /界面生成器 : What do I need to subclass to replicate this window?

objective-c - 在 Objective C 中动态调用类方法

cocoa - 使用QTKit编辑后如何正确保存QTMovie?