2015-12-07 42 views
1

所以我在updateChangeCount:(NSDocumentChangeType)changeType上设置了一个断点来查看我的文档何时被标记为脏。NSDocument在NSUndoManager保存后被标记为脏 - 为什么?

后,我保存文档时,它与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。有关如何防止这种情况发生的任何建议?

这是一个问题,因为用户可以保存文档,关闭窗口,然后再次请求保存。

回答

2

撤消操作通常收集在撤消组中。 NSUndoManager通常在运行循环期间自动创建撤消组。第一次要求在运行循环中记录撤消操作时,它会创建一个新组。然后,在循环结束时,它关闭组。

您可以通过调用-[NSUndoManager disableUndoRegistration]-[NSUndoManager enableUndoRegistration]来暂时禁用撤销。您可以使用-[NSUndoManager removeAllActions]删除所有撤消操作。

+0

所以我实际上试图在我的'writeSafelyToURL'挂钩期间禁用并重新启用,但它仍然触发updateChangeCount为0,所以我的文档被再次标记为脏。任何其他想法?我希望我能找到触发最终调用updateChangeCount的通知的内容。 – Geesu

相关问题