我想在应用程序终止时做一些事情,所以我在 AppDelegate 中添加了 applicationShouldTerminate:
和 applicationWillTerminate
方法。但是,当我从 XCode 运行我的应用程序然后按 ⌘Q
时,这两种方法都不会被调用。
现在我通过记录和调用 printf
进行测试,当我退出我的应用程序时,我在任何地方都看不到任何输出。 documentation 似乎表明这应该有效。谷歌没有产生任何有用的东西,在 GitHub 上搜索示例代码主要返回观察其他应用程序被终止的应用程序。
为什么 applicationShouldTerminate:
和 applicationWillTerminate
没有被调用?
这是我的应用程序委托(delegate)中的这些方法实现:
- (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 找到该项目)。
最佳答案
我通过编辑 Info.plist
并将 Application can be killed immediately when user is shutting down or logging out
设置为 NO
来解决这个问题。
Xcode 自动生成 applicationWillTerminate
的方法 stub 对我来说很奇怪,但默认情况下由于这个 Info.plist
键它不起作用。为了将来引用,我正在运行 Xcode 版本 11.2.1 (11B500)。
(在 Apple Developer forums 上找到了这个答案。)
关于objective-c - applicationWillTerminate 和 applicationShouldTerminate 不能在 macOS 上运行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59760604/