Когда приложение закрывается, метод isDocumentEdited NSDocument всегда возвращает false - PullRequest
0 голосов
/ 16 ноября 2018

В приложении на основе документов любое изменение в документе сигнализируется

[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 сбрасывается в ЛОЖЬ где-то перед входом в этот процесс?

Я проверил весь код, чтобы убедиться, что не было [self updateChangeCount: NSChangeCleared], которое можно было бы где-то запустить, но это не тот случай. Я могу обойти проблему, используя пользовательскую систему подсчета updateChange в моем подклассе Document, но я бы предпочел использовать встроенный процесс.

Использование Xcode 10 под Mojave с целью 10,12

...