Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 由于NSNDOManager的原因,NSDocument在保存后被标记为脏文件-为什么?_Objective C_Nsdocument_Nsundomanager - Fatal编程技术网

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的通知的原因。