【问题标题】:applicationWillTerminate not called未调用 applicationWillTerminate
【发布时间】:2011-11-19 10:08:37
【问题描述】:

我实现了 applicationWillTerminate 方法,但它从未被调用过

-(void)applicationWillTerminate:(NSNotification *)notification
{
    [[NSApplication sharedApplication] terminate:self];
    NSLog(@"EOP");
}

如何在应用关闭前执行一些代码?

谢谢

【问题讨论】:

  • 不是,有来自 iOS 开发库的 UIApplication,这里是 Mac OS

标签: macos cocoa application-close


【解决方案1】:

我刚刚加了

-(BOOL) applicationShouldTerminateAfterLastWindowClosed:(NSApplication *) sender{
return YES;
}

现在 applicationWillTerminate 调用

【讨论】:

  • 如果这改变了它,那么也许应用程序实际上并没有关闭?你刚刚关闭了应用程序的所有窗口?
  • 很可能你是对的。但是现在应用关闭了:我得到了我需要的东西
  • 无法关闭应用程序;该动词不与该名词一起使用。是的,当用户关闭最后一个窗口时,应用程序通常不会自动退出。你必须选择加入。实际上,使用 Quit 命令退出应用程序将始终触发 applicationWillTerminate:(假设没有任何事情,例如确认警报,会妨碍您)。 Lion 中引入的另一种方法是自动终止,它更懒惰并假装应用程序仍在运行;请参阅文档。
  • 当您将函数定义为不返回任何内容但返回 bool 时,这如何工作?
  • 当然是印刷错误)已修复
【解决方案2】:

解决方案 1:

在项目信息(NSSupportsSuddenTermination key)中将Application can bekilled设置为NO。 然后将在应用程序退出之前调用applicationWillTerminate 函数。

解决方案 2:

如果您需要能够取消终止,那么您应该重写applicationShouldTerminate 函数

func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply {
    // Do some stuff before quitting for good
    return .terminateNow
}

【讨论】:

    【解决方案3】:

    请将您的 plist 中的密钥 (UIApplicationExitsOnSuspend) 设置为 YES

    键:UIApplicationExitsOnSuspend
    类型:布尔值
    值:是

    【讨论】:

    • 这个问题是关于osx而不是ios,注意到问题中的NSApplication了吗?
    猜你喜欢
    • 2011-11-17
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    相关资源
    最近更新 更多