NSAPPLICATION Willterminatenotificación no recibida
-
16-09-2019 - |
Pregunta
Tengo algún código que debe ejecutarse cuando la aplicación termina. Registro mi controlador para la aplicación NSAPPLICACIÓN
[[NSNotificationCenter defaultCenter]
addObserver: self
selector: @selector(applicationWillTerminate:)
name: NSApplicationWillTerminateNotification
object: nil];
Ahora, si comienzo mi aplicación y la dejo en los primeros 20 segundos más o menos, applicationWillTerminate
se llama. Si renuncié a la aplicación más tarde, no lo hace. ¿Qué en mi aplicación podría causar este comportamiento? También he tratado de configurar mi controlador como delegado de NSAPPLICATION con los mismos resultados. ¿Algunas ideas?
Gracias.
Ah, y este es Xcode 3.2, Snow Leopard 10.6.1, usando 10.5 SDK. Sucede tanto en la depuración como en las construcciones de lanzamiento.
Solución
Hay varias razones por las cuales esto podría estar sucediendo.
Si está ejecutando GC'D, ¿su observador es recolectado y finalizado antes de que ocurra la terminación? (Debería probar esto y presentar un error si lo hace, lo que al menos es necesario documentar)
¿Su aplicación se está bloqueando en silencio o llamando directamente la salida ()?
En general, no puede contar con la notificación de terminación que se recibe, ya que el usuario podría ir a dejar de fumar por el mismo.
Además, en Snow Leopard, hay una característica llamada terminación repentina que permite que su aplicación le haga saber al sistema que es seguro matar la aplicación en lugar de pasar por la rigamarole de terminación normal. Está documentado en el Nsprocessinfo documentación.