2009-02-05 11 views
6

Tengo una aplicación que permite al usuario ver, manipular y administrar una colección de objetos de programación. Las diferentes partes de la aplicación necesitan acceso a esta información. He experimentado con hacer de la colección un singleton, pero no me pareció muy limpio.¿Dónde colocas datos de aplicaciones globales en una aplicación de iPhone?

Recientemente he cambiado a almacenar los datos globales en la clase AppDelegate y usando:

MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 
[delegate.myGlobalData doSomething]; 

lo que elimina la necesidad de que mis datos globales para ser un producto único, pero en realidad es sólo aprovechando el singleton UIApplication.

Realmente no hay un solo controlador de vista primario donde tiene sentido almacenarlo en mi caso. Entonces me preguntaba qué estrategias diferentes usan las personas para abordar esto.

Respuesta

6

Si tiene un modelo de datos central que necesita ser accesible para múltiples controladores, no hay nada de malo en usar un singleton para administrar los datos, un "sharedManager" es exactamente lo que exige el escenario. Esto es esencialmente lo que Apple hace con su API de libreta de direcciones para manipular contactos. Usan una API estilo C pero implica obtener una referencia a la base de datos de la libreta de direcciones compartida y luego usarla en llamadas futuras.

Usar el delegado de la aplicación también funciona, pero como usted nota, es realmente lo mismo. Está designando al delegado de aplicaciones singleton como propietario del modelo de datos, lo cual también está bien.

NSUserDefaults se pueden abusar de esta manera, pero ese no es realmente su propósito. Además de ser algo feo, también impone restricciones al tipo de datos que puede almacenar. Su propio modelo puede almacenar los datos que desee, pero NSUserDefaults no es tan flexible.

Usar SQLite o una lista de propiedades o lo que sea para almacenar los datos en un archivo es realmente ortogonal a la cuestión de cómo administrarlo. Según su descripción, un enfoque único parece razonable, y ese singleton puede escribir en los archivos de cualquier forma que tenga sentido para los datos con los que está trabajando.

+0

Si está tentado a rechazar esto (como alguien acaba de hacer), mire la fecha en que fue escrito. En ese momento, iPhone OS 2.2 (no iOS) estaba actualizado y Core Data no estaba disponible en iPhones. –

4

Mucha gente almacena todo en AppDelegate y accede a los datos a través del delegado [[UIApplication sharedApplication]].

Si se supone que los datos se conservarán, también podría usar el singleton NSUserDefaults.

Si los datos son grandes, tal vez necesite SQLite.

Esto es para datos "globales" como usted solicitó.

Si sus controladores de vista están organizados en árbol, una mejor manera sería pasar los datos requeridos desde el UIViewController padre al UIViewController secundario.

Cuestiones relacionadas