2010-06-23 10 views
8

Acabo de recibir el iPhone SDK 4 y estoy tratando de dejar de desarrollar una aplicación en la que estaba trabajando antes. Así que he implementado tanto -(void)applicationDidEnterBackground:(UIApplication *)application y - (void)applicationWillTerminate:(UIApplication *)applicationAplicación de iPhone que ejecuta Simulator 4.0 recibió Sigkill

Al hacer clic en el botón de inicio en el simulador 4.0, parece que funciona bien. La aplicación llama al -(void)applicationDidEnterBackground:(UIApplication *)application e ingresa el estado de fondo ..

Sin embargo, hago doble clic en el botón de inicio para exponer la aplicación que se ejecuta en segundo plano, y la mantiene presionada para mostrar el signo menos o salir. Cuando hago clic en el signo menos, el depurador dice

Programa

recibe la señal: "SIGKILL"

además, - (void)applicationWillTerminate:(UIApplication *)application Nunca se llama. ¿Me estoy perdiendo algo que tengo que hacer para que esto funcione en OS4? O al menos alguien me puede indicar una forma de depurar SIGKILL. Gracias.

Respuesta

13

-applicationWillTerminate: solo se invoca si su aplicación está en estado de ejecución cuando se le pide que se cierre. Si ya está en un estado suspendido (como lo tiene aquí), el sistema simplemente envía una señal de muerte a la aplicación. Esto ocurre cuando el usuario presiona los botones rojos menos para finalizar la aplicación manualmente y también cuando el sistema decide abandonar la aplicación para liberar memoria para la aplicación de primer plano.

Si su aplicación se ejecuta en segundo plano (reproducir música o ejecutar algunas tareas en segundo plano, por ejemplo) y el usuario finaliza la aplicación manualmente presionando el botón menos, solo obtendrá un mensaje -applicationWillTerminate:. Por lo tanto, debe guardar todo su estado/etc. antes de regresar de -applicationDidEnterBackground:.

+0

Gracias por la respuesta. Eso tiene sentido. Sin embargo, estoy teniendo otro problema también. Cuando se llama -applicationDidEnterBackground: trato de guardar el estado de la aplicación usando NSUserDefaults, pero por alguna razón mis valores no son los que espero que sean una vez que la aplicación se reinicie. ¿Alguna razón por la cual esto no funcionaría en OS4? – NickDK

+0

No importa ... No estaba llamando a sincronizar en NSUserdefaults. – NickDK

2

Esto es de esperar que la barra multitarea "botón de cierre rojo" sea el equivalente a forzar el cierre de una aplicación en Mac OS X. Este es el comportamiento documentado. Apple espera que los usuarios normales de iOS 4 simplemente inicien/usen/modifiquen aplicaciones que no tienen que pensar en términos de terminación de procesos ni nada. El sistema lo administrará.

Solo asegúrese de guardar cualquier dato importante en la aplicación: willResignActive: o applicationWillEnterBackground. Porque después de eso es posible que te maten cuando la presión de la memoria obliga al sistema a limpiar ... Snow Leopard introdujo un comportamiento similar para las aplicaciones que usan la clave NSSupportsSuddenTermination en su Info.plist. Una aplicación básicamente le dice al sistema que periódicamente guarda sus datos poco a poco, de modo que cuando va en segundo plano no quede nada por hacer o muy poco. A diferencia de las aplicaciones de escritorio grandes aplicaciones monolíticas ...

Cuestiones relacionadas