2015-12-07 40 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

相關問題