2011-08-07 12 views
6

Mi aplicación está extrayendo datos JSON de nuestro servicio web. En todas las instancias hasta ahora, la información se mantendría en la memoria o simplemente se actualizaría sobre la marcha sin necesidad de retener nada localmente que no sea el token de inicio de sesión utilizado en la API. Con una de las nuevas funciones que estamos agregando, tomaremos un grupo de ubicaciones, 26 max, con long, lat, radius y name.Almacenamiento de objetos en iOS para su uso posterior

También necesito agregar 1-2 campos a esta información para crear un objeto más grande. Entonces mi pregunta es, ¿cuál sería la mejor manera de almacenar este tipo de datos en el sistema de archivos iOS? Actualmente he estado usando NSUserDefaults, pero parece algo limitado o desaconsejable para grandes cantidades de datos. Tal vez no.

Estos datos deberán recuperarse, modificarse o corregirse, y volverse a guardar. Todo esto sin dejar de tener la capacidad de extraer cualquiera de esos 26 objetos. Gracias de antemano por leer y ayudar.

Respuesta

5

Para una cantidad tan pequeña de datos (26 artículos) sugiero archiving.

Guardar en la lista con NSKeyedArchiver/NSKeyedUnarchiver. Lea sus datos del didinfinanceLaunchingWithOptions del delegado y escuche el UIApplicationWillResignActiveNotification para guardarlo.

A NSUserDefaults es una aplicación diseñada para almacenar las preferencias del usuario. A menudo se usa en lugar de un plist regular para guardar un par de líneas de código, lo que creo que es una mala idea porque obtienes una complejidad adicional no relacionada con tu tarea.

Si desea que el inicio de sesión esté protegido contra alguien que robe el dispositivo y realice análisis forenses, utilice el llavero. Es posible que desee utilizar un contenedor y leer algunos artículos, comente si está interesado.

Si busca más funciones, vea Best way to store data on iphone pero no parece ser el caso ahora.

Parte del código para que pueda empezar ... Ya llamar ahorrar en aplicación renunciar:

[[NSNotificationCenter defaultCenter] 
     addObserver:self 
      selector:@selector(saveMyData) 
       name:UIApplicationWillResignActiveNotification 
      object:nil]; 

En cada objeto de la gráfica/diccionario/lo que sea que quiere archivar aplicar NSCoding:

- (void)encodeWithCoder:(NSCoder*)coder { 
    [coder encodeObject:myIvar forKey:kmyIvar]; 
} 

- (id)initWithCoder:(NSCoder*)coder { 
    if((self = [super initWithCoder:coder])) { 
     self.myIvar = [[coder decodeObjectForKey:kmyIvar] retain]; 
    } 
    return self; 
} 
+0

he visto algunos ejemplos de uso del llavero para el almacenamiento de información de inicio de sesión, que yo estaba pensando en la implementación. Gracias por la info. –

+0

El archivado seguro suena como una idea mucho mejor para elementos de 20 is luego CoreData. Y si necesita almacenar nombre de usuario y contraseña, hay una fuente de muestra de Apple que describí cómo usar aquí: http://stackoverflow.com/questions/6972092/ios-how-to-store-username-password-wihtin-an -app/6972305 # 6972305 –

1

Tuve la misma pregunta y descubrí una solución mucho mejor.

Lo que podría hacer es almacenar la cadena JSON como su NSUserDefault. Luego, cuando recargue la aplicación, use el mismo método (o utilidad de estructura) que utilizó para asignar la cadena JSON a sus objetos la primera vez. De esta forma, aún puede aprovechar la facilidad de NSUserDefaults.

Si está utilizando RestKit para administrar sus servicios web, es aún más fácil. La respuesta en esta publicación muestra cómo usar el analizador JSON de RestKit para mapear desde JSON a su objeto.

Deserializing local NSString of JSON into objects via RestKit (no network download)

+0

muy agradable, usaré este enfoque en mi proyecto, ¡gracias! :-) – kernix

Cuestiones relacionadas