Objective c 由于NSNDOManager的原因,NSDocument在保存后被标记为脏文件-为什么?
因此,我在Objective c 由于NSNDOManager的原因,NSDocument在保存后被标记为脏文件-为什么?,objective-c,nsdocument,nsundomanager,Objective C,Nsdocument,Nsundomanager,因此,我在updateChangeCount:(NSDocumentChangeType)changeType上设置了一个断点,以查看我的文档何时被标记为脏文档 保存文档后,将使用NSChangeCleared正确清除该文档,然后立即使用NSChangeDone调用该文档,从而增加已更改的计数 以下是该调用的堆栈跟踪: 0 SS 0x000000010000764a -[SSDocument updateChangeC
updateChangeCount:(NSDocumentChangeType)changeType
上设置了一个断点,以查看我的文档何时被标记为脏文档
保存文档后,将使用NSChangeCleared
正确清除该文档,然后立即使用NSChangeDone
调用该文档,从而增加已更改的计数
以下是该调用的堆栈跟踪:
0 SS 0x000000010000764a -[SSDocument updateChangeCount:] + 42
1 AppKit 0x00007fff94fdcdac -[NSDocument _changeWasDone:] + 458
2 CoreFoundation 0x00007fff9c415c9c __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 12
3 CoreFoundation 0x00007fff9c415c2f ___CFXRegistrationPost_block_invoke + 63
4 CoreFoundation 0x00007fff9c415ba7 _CFXRegistrationPost + 407
5 CoreFoundation 0x00007fff9c415912 ___CFXNotificationPost_block_invoke + 50
6 CoreFoundation 0x00007fff9c3d26d2 -[_CFXNotificationRegistrar find:object:observer:enumerator:] + 1922
7 CoreFoundation 0x00007fff9c3d1925 _CFXNotificationPost + 693
8 Foundation 0x00007fff9b72b0fa -[NSNotificationCenter postNotificationName:object:userInfo:] + 66
9 Foundation 0x00007fff9b7ba4ad -[NSUndoManager _endUndoGroupRemovingIfEmpty:] + 535
10 Foundation 0x00007fff9b79b06b +[NSUndoManager(NSPrivate) _endTopLevelGroupings] + 484
11 AppKit 0x00007fff94bd7dca -[NSApplication run] + 844
我还没有以任何方式配置NSUndoManager。有没有关于如何防止这种情况发生的建议
这是一个问题,因为用户可以保存文档,关闭窗口,然后要求他们再次保存
撤消操作通常在撤消组中收集。NSUndoManager通常在运行循环期间自动创建撤消组。第一次要求它在运行循环中记录撤消操作时,它将创建一个新组。然后,在循环结束时,它关闭组
您可以通过调用
-[NSUndoManager disableundowregistration]
和-[NSUndoManager enabledundowregistration]
临时禁用撤消。您可以使用-[NSUndoManager removeAllActions]
删除所有撤消操作,因此我实际上尝试在我的writeSafelyToURL
钩子期间禁用并重新启用,但它仍然使用0触发updateChangeCount,因此我的文档再次标记为脏。还有其他想法吗?我希望我能找到触发最终调用updateChangeCount的通知的原因。