当应用程序退出时,NSDocument 的 isDocumentEdited 方法总是 returns false

When Application quits, NSDocument's isDocumentEdited method always returns false

在 document-based 应用程序中,文档中的任何更改都由

发出信号
[self updateChangeCount: NSChangeDone];

任何时候,在调试时,只要文档已被编辑,[document isEdited] returns TRUE。文档的 window 在文档名称旁边显示 "Modified"。当我退出应用程序时,我的应用程序委托会检查所有打开的文档,并使用此循环检查它们是否已被编辑:

NSUInteger needsSaving = 0;
while (count--) {
    NSWindow *window = [windows objectAtIndex:count];
    Document *document = [Document documentForWindow:window];
    if (document && [document isDocumentEdited]) needsSaving++;
}

似乎对于任何文档——修改与否—— [document isDocumentEdited]; 总是 returns 错误!以至于无法调用审核change/save流程。如果我检查 [window isDocumentEdited],它也会 returns FALSE 尽管 "Modified" 写在 window.

的标题栏中

当应用程序退出时,更改最终会(自动)保存,但不会通知用户。这是一个非常令人不安的行为!

知道什么可以解释 isDocumentEdited 布尔值在进入此过程之前在某处重置为 FALSE 吗?

我检查了所有代码,看看是否有任何 [self updateChangeCount: NSChangeCleared] 可能是 运行 的地方,但事实并非如此。我可以在我的 Document 子类中使用自定义 updateChange 计数系统来避免这个问题,但我宁愿使用 built-in 过程。

在 Mojave 下使用 Xcode 10,目标为 10.12

isDocumentEdited 被记录为“指示文档是否有未保存更改的值”。如果启用了 autosavesInPlace,则可能会发生此行为。应用程序退出时不会有未保存的更改。