NSAPplicationWillTerMInatenotification não recebido
-
16-09-2019 - |
Pergunta
Eu tenho algum código que precisa ser executado quando o aplicativo termina. Registro meu controlador para a NSAPplicationWillMerminatenotification da seguinte maneira:
[[NSNotificationCenter defaultCenter]
addObserver: self
selector: @selector(applicationWillTerminate:)
name: NSApplicationWillTerminateNotification
object: nil];
Agora, se eu iniciar meu aplicativo e deixar -o nos primeiros 20 segundos, mais ou menos, applicationWillTerminate
é chamado. Se eu desistir do aplicativo mais tarde, não. O que no meu aplicativo poderia causar esse comportamento? Eu também tentei configurar meu controlador como o delegado da NSApplicação com os mesmos resultados. Alguma ideia?
Obrigado.
Ah, e este é o Xcode 3.2, Snow Leopard 10.6.1, usando 10.5 SDK. Acontece nas compilações de depuração e lançamento.
Solução
Existem várias razões pelas quais isso pode estar acontecendo.
Se você está executando o GC'D, seu observador é coletado e finalizado antes que o término aconteça? (Eu deveria testar isso e arquivar um bug, se isso acontecer, o que pelo menos precisa ser documentado)
Seu aplicativo está travando silenciosamente ou chamando de saída () diretamente?
Em geral, você não pode contar com a notificação de rescisão que está sendo recebida, pois o usuário pode ir para uma força para que ela pare.
Além disso, em Snow Leopard, existe um recurso chamado terminação repentina que permite que seu aplicativo informe o sistema que é seguro matar o aplicativo em vez de passar pela terminação normal Rigamarole. Está documentado no NsprocessInfo documentação.