【发布时间】:2018-04-01 22:29:44
【问题描述】:
我在 Xcode 中创建了一个 Mac 应用程序。我所做的唯一代码更改是在应用程序委托中。现在它的全部内容如下:
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
}
- (void) readyToTerminate: (id) sender {
NSLog(@"Ready to terminate");
[NSApplication.sharedApplication replyToApplicationShouldTerminate:YES];
}
- (NSApplicationTerminateReply) applicationShouldTerminate:(NSApplication *)sender {
[self performSelector:@selector(readyToTerminate:) withObject:self afterDelay:1.0];
NSLog(@"Later please");
return NSTerminateLater;
}
- (void)applicationWillTerminate:(NSNotification *)aNotification {
NSLog(@"Terminating");
}
@end
当我运行应用程序时,我确实看到了一个窗口。然后我按命令-Q 终止。输出是:
2018-04-01 17:20:03.110563-0500 TerminateThisApp[3336:364401] Unknown Window
class (null) in Interface Builder file,
creating generic Window instead
2018-04-01 17:20:06.929175-0500 TerminateThisApp[3336:364401] Later please
所以 readyToTerminate: 没有被调用。为什么会这样?我不明白。
为了它的价值,我尝试了一个同样没有结果的 NSTimer。我还尝试以与 didFinishLaunching 相同的方式调用 readyToTerminate。在这种情况下,readyToTerminate 确实触发了(并且应用程序没有终止,这很好)。
发生了什么事?
【问题讨论】:
标签: macos appdelegate appkit