2009-11-28 16 views
11

He desarrollado una aplicación para iPhone con barra de pestañas y controladores de navegación.¿Cómo conservar el estado de la aplicación iPhone antes de finalizar la aplicación?

Está funcionando bien por ahora.

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

Supongamos que tengo 6 pestañas y Si viene una llamada entrante, entonces después de volver a iniciar la aplicación, debería ver la pestaña seleccionada finalmente.

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

Alguien me puede dar una forma recta para hacer esto?

Respuesta

27

No existe un "ajuste universal", respuesta exacta a esta pregunta: la implementación del estado de la aplicación de guardado dependerá en gran medida de la estructura de la aplicación, de modo que es improbable que una solución individual se ajuste a su caso específico.

Hay algunos consejos generales y punteros, sin embargo, que se debe poner en el camino correcto para el desarrollo de un buen estado de solución conservante:

  1. Por lo general, tendrá que realizar ninguna operación para guardar el estado en applicationWillTerminate: en su delegado de aplicación o escuchando por en otras clases.

  2. Look at NSUserDefaults. Puede usar NSUserDefaults para almacenar pares de clave/valor (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 la aplicación (dado que los valores se cargan al iniciarse).

  3. Más específico para su caso ... si todo lo que desea hacer es conservar la pestaña seleccionada entre la aplicación, debe implementar applicationWillTerminate: y usar NSUserDefaults para almacenar el índice de pestañas 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, la pila de navegación de la pestaña seleccionada también, 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 muy 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, incluyendo 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) , Le sugiero que cambie su enfoque de almacenar el estado de la aplicación a nivel de delegado de la aplicación y, en su lugar, concéntrese en que sus clases de controlador de vista escuchen y realicen su propio ahorro de estado específico. También debería determinar algún mecanismo para usar esa información guardada por controlador de vista en la terminación 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 nebuloso, especialmente para los casos más generales y complejas, ya que como he señalado no existe una solución general para esta pregunta, ya que depende en gran medida en la estructura de su aplicación.

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

+0

puede proporcionar ningún ejemplo o un enlace tutorial – harshalb

+0

# 5 es precisamente el tipo de cosa que estoy tratando de hacer. En mi caso, estoy usando Core Data. En la base de la pila de VC, puede seleccionar un objeto gestionado "raíz" existente o crear uno nuevo. Ese objeto luego se pasa al siguiente VC para su edición. Por otra parte, los atributos pueden ser seleccionados/editados, por lo que existe este requisito previo en curso. Como puedo guardar la selección en la parte superior (la orden no cambiará entre ejecuciones), sospecho que necesito "caminar la pila" de abajo hacia arriba y volver a crearla. Siento que realmente debería usar NSCoding aquí, pero parece estar en desacuerdo con este tipo de restauración. Hmm. –

+0

Esta biblioteca parece útil: https://github.com/enormego/EGOViewStackPersistence – pix0r

Cuestiones relacionadas