在基于文档的应用程序中,文档中的任何更改都由
[self updateChangeCount: NSChangeDone];
在任何时候,在调试时,[document isEdited]
只要文档已经被编辑,就返回 TRUE。文档的窗口在文档名称旁边显示“已修改”。当我退出应用程序时,我的应用程序代表会使用以下循环检查所有打开的文档,并检查它们是否已被编辑:
NSUInteger needsSaving = 0;
while (count--) {
NSWindow *window = [windows objectAtIndex:count];
Document *document = [Document documentForWindow:window];
if (document && [document isDocumentEdited]) needsSaving++;
}
似乎对于任何文档——无论是否修改——
[document isDocumentEdited];
总是返回 FALSE!这样就无法调用审核更改/保存过程。如果我检查[window isDocumentEdited]
,它也会返回 FALSE,尽管窗口的标题栏中写有“Modified”。
当应用程序退出时,更改最终会被保存(自动),但不会通知用户。这是一个非常令人不安的行为!
知道什么可以解释isDocumentEdited
布尔值在进入此过程之前在某处重置为 FALSE 吗?
我检查了所有代码,看看是否有任何[self updateChangeCount: NSChangeCleared]
可以在某处运行的代码,但事实并非如此。我可以在我的 Document 子类中使用自定义 updateChange 计数系统来规避这个问题,但我宁愿使用内置过程。
在 Mojave 下使用 Xcode 10,目标为 10.12