繁体   English   中英

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

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

在基于文档的应用程序中,文档中的任何更改都由

[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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM