¿Cómo conservar el estado de la aplicación de iPhone antes de finalizar la aplicación?

StackOverflow https://stackoverflow.com/questions/1811696

Pregunta

He desarrollado una aplicación para iPhone con barra de pestañas y controladores de navegación.

Funciona bien por ahora.

Ahora quiero que la aplicación guarde su estado antes de salir.

Supongamos que tengo 6 pestañas y si llega una llamada entrante, así que después de reiniciar la aplicación debería ver la pestaña seleccionada que se seleccionó por última vez.

He visto varias preguntas sobre este tema, pero estoy más confundido después de verlas,

¿Alguien puede decirme una forma directa de hacer esto?

¿Fue útil?

Solución

No existe una respuesta única para esta pregunta, la implementación de guardar el estado de la aplicación dependerá en gran medida de la estructura de la aplicación, por lo que es poco probable que una solución única se ajuste a su caso específico.

Sin embargo, hay algunos consejos y sugerencias generales que deberían llevarlo por el camino correcto para desarrollar una buena solución para preservar el estado:

  1. Normalmente querrá realizar cualquier operación para guardar el estado en applicationWillTerminate: en el delegado de su aplicación o escuchando UIApplicationWillTerminateNotification en otras clases.

  2. Mire NSUserDefaults. Puede usar NSUserDefaults para almacenar la clave / pares de valores (similar a un NSDictionary, aunque solo puede almacenar objetos que implementan NSCoding en NSUserDefaults) relacionados con preferencias u otra información. Use NSUserDefaults para almacenar información de estado. Una advertencia: no debe usar NSUserDefaults para almacenar grandes cantidades de datos, ya que esto ralentizará el tiempo de inicio de su aplicación (ya que los valores se cargan en el inicio).

  3. Más específico para su caso ... si todo lo que desea hacer es preservar la pestaña seleccionada entre aplicaciones, debe implementar applicationWillTerminate: y usar NSUserDefaults para almacenar el índice de pestaña seleccionado. Luego, en su implementación applicationDidFinishLaunching: , comprobará la existencia de esa clave NSUserDefaults y establecerá el índice seleccionado de UITabBarController en el valor almacenado si existe.

  4. Si desea poder restaurar, por ejemplo, también la pila de navegación de la pestaña seleccionada, deberá almacenar suficiente información para que la pila de navegación pueda reconstruirse con precisión. La información que debe almacenar en NSUserDefaults es difícil de cuantificar en un sentido general, ya que es altamente específica para la estructura de su aplicación y las posibles iteraciones de la jerarquía del controlador de vista dentro de la pila de navegación.

  5. Si necesita restaurar una pila de navegación más general, incluidos los datos de usuario posiblemente ingresados ??que no desea perder cuando se cierra la aplicación (como si el usuario está creando un nuevo registro de algún tipo ), Sugeriría que cambie su enfoque de almacenar el estado de la aplicación en el nivel de delegado de la aplicación y, en su lugar, se concentre en hacer que sus clases de controlador de vista escuchen UIApplicationWillTerminateNotification y guarden su propio estado específico. También tendría que determinar algún mecanismo para usar esa información guardada por controlador de vista al finalizar para restaurar la jerarquía de navegación. Esta es una técnica más compleja que puede no ser necesaria según sus necesidades.

Desafortunadamente, esta respuesta es un poco nebulosa, especialmente para los casos más generales y complejos, porque como señalé, no hay una solución general para esta pregunta, ya que depende en gran medida de la estructura de su aplicación.

Aquí hay un ejemplo del uso de NSUserDefaults: http://robertcarlsen.net/2009/06/19/overly-simplistic-saving-state-in-of-for-iphone-847

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