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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top