2012-06-07 15 views
8

Estoy trabajando en un lector de RSS. Es solo una vista de tabla y cada celda muestra un modelo de datos personalizado RSSEntry. Y tengo un NSMutableArray allEntries que contiene todos los RSSEntry que obtuve del servidor. Esto es lo que se ve como RSSEntry:Uso de NSKeyedArchiver para almacenar el modelo de datos personalizado

@interface RSSEntry : NSObject <NSCoding> { 
     NSString *_blogTitle; 
     NSString *_articleTitle; 
     NSString *_articleUrl; 
     NSDate *_articleDate; 
    } 

Quiero restaurar los datos de archivo local así que cuando me salir y abrir esta aplicación una vez más, la tableview se rellena con los datos cuando la última actualización.

He leído un ejemplo en 'Inicio de la programación de iOS5', pero solo almacena y restaura solo un modelo de datos. Así que no sé cómo almacenar esta matriz mutable llena de mi modelo de datos personalizado y restaurarla.

utilizo siguiente código para almacenar y recuperar datos:

// STORE 
NSMutableData *data = [[NSMutableData alloc] init]; 
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; 
[archiver encodeObject:entry forKey:kDataKey]; 
[archiver finishEncoding]; 

// RESTORE 
NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath:kFilename]]; 
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; 
RSSEntry *entries = [unarchiver decodeObjectForKey:kDataKey]; 
[unarchiver finishDecoding]; 

sólo puedo almacenar y recuperar datos de un modelo de esta manera.

Quién puede echarme una mano. Soy nuevo en la programación de iOS, tal vez sea un poco aburrido.

Respuesta

14

Lugar todas las entradas que desea almacenar en un NSArray Utilizando este código:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:entries]; 

Dónde entries es su gama de entradas. Agradable y fácil, solo una línea de código.

Para desarchivar, sólo tiene que utilizar

NSArray *entries = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

NSKeyedArchiver es capaz de archivar cualquier estructura de datos, incluso una muy complejo, de Objective-C objetos que implementan la NSCoding protocolo, incluyendo anidado NSArray s, NSDictionary s, y objetos personalizados, a un archivo. NSKeyedUnarchiver hace lo contrario, tomando los datos producidos por NSKeyedArchiver y restableciendo el gráfico original del objeto que se archivó. Técnicamente, podrían ser solo una clase, pero Apple decidió separarlos por funcionalidad porque esto es más correcto gramaticalmente o algo :)

Supongo que puede escribir el objeto resultante NSData en un archivo y leerlo de nuevo.

+0

No sé por qué, pero esta respuesta funciona cuando todos los demás que parecen idénticos no lo hacen - gracias –

3

podría almacenar la NSDictionary de la siguiente manera

NSDictionary *Your_NSDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
           @"Obj1", @"Key1", 
           @"Obj2", @"Key2", nil]; 
//store dictionary 
NSMutableData *yourData = [[NSMutableData alloc] init]; 
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:yourData]; 
[archiver encodeObject:Your_NSDictionary forKey: @"key"]; 
archiver finishEncoding]; 
[yourData writeToFile:@"FilePath" atomically:YES]; 
[yourData release]; 
[archiver release]; 


//Load dictionary 

NSData *yourData = [[NSMutableData alloc]initWithContentsOfFile:@"FilePath"]; 
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:yourData]; 
Your_NSDictionary = [unarchiver decodeObjectForKey: @"key"]; 
[unarchiver finishDecoding]; 
[unarchiver release]; 
[yourData release]; 
Cuestiones relacionadas