applicationWillTerminate и applicationShouldTerminate не запускаются на macOS? - PullRequest
1 голос
/ 16 января 2020

Я хочу что-то сделать, когда приложение завершается, поэтому я добавил методы applicationShouldTerminate: и applicationWillTerminate в свой AppDelegate. Тем не менее, когда я запускаю свое приложение из XCode и затем нажимаю ⌘Q, ни один из методов не вызывается.

Теперь я тестирую, регистрируя и вызывая printf, и я нигде не вижу вывода когда я выйду из приложения. документация , кажется, указывает, что это должно работать. Google не дал ничего полезного, и поиск в GitHub, например, кода в основном возвращает приложения, которые наблюдают, как другие приложения закрываются.

Почему applicationShouldTerminate: и applicationWillTerminate не вызывают?

Вот те реализации метода в моем делегате приложения:

- (NSApplicationTerminateReply)applicationShouldTerminate:(NSNotification *)aNotification {
    printf("printf applicationShouldTerminate");
    NSLog(@"NSLog applicationShouldTerminate");
    return NSTerminateNow;
}

- (void)applicationWillTerminate:(NSNotification *)aNotification {
    printf("printf applicationWillTerminate");
    NSLog(@"NSLog applicationWillTerminate");
}

(я также проверил, создав новый проект в Xcode, который вы можете найти по адресу https://github.com/noahlt/TestTerminator).

1 Ответ

2 голосов
/ 16 января 2020

Я исправил это, отредактировав Info.plist и установив Application can be killed immediately when user is shutting down or logging out в NO.

screenshot of edited Info.plist

Мне довольно странно, что Xcode самопроизвольно генерируется заглушка метода для applicationWillTerminate, но по умолчанию она не работает из-за этой клавиши Info.plist. Для дальнейшего использования я использую версию Xcode 11.2.1 (11B500).

(Этот ответ найден на форумах разработчиков Apple .)

...