2010-02-09 14 views
17

me preguntaba si es o no es posible utilizar el método NSCoder:Encode NSArray o NSDictionary usando NSCoder

- (void)encodeObject:(id)objv forKey:(NSString *)key 

para codificar ya sea una instancia de NSArray o NSDictionary. Si no, ¿cómo haces para codificarlos? Estoy intentando usar NSKeyedArchived/NSKeyedUnarchiver para enviar datos entre teléfonos usando GameKit. Lo intenté y parece que no puedo recuperar la cadena que almacené en mi matriz. La clase de paquete que hice aparece junto con el entero de tipo paquete, pero no los datos en la matriz, parece.

¡Gracias de antemano!

+0

Es un NSManagedObject personalizado .... Creo que tengo que usar XML o JSON para esto, pero necesito aprender cómo D: –

Respuesta

10

NSKeyedArchiver/Unarchiver debe codificar y decodificar NSArrays y NSDictionaries sin problema. Si la clase de paquete que ha creado implementa el protocolo NSCoding, es necesario llamar explícitamente [encodeObject:myNsArrayforKey:@"stringsArray"] en su método -encodeWithCoder: (suponiendo que myNsArray es el nombre de la variable de instancia en el objeto de paquete que desea codificar). Pero entonces el archivador y NSArray deberían encargarse del resto. Si está haciendo esto, sería útil saber más sobre el diseño de sus clases y quién llama cuando codifica/descodifica.

31

Si la matriz o diccionario es el objeto raíz que debe hacer

NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:someArray]; 

o

BOOL success = [NSKeyedArchiver archiveRootObject:someArray toFile:filePath]; 

Si se trata de una variable de instancia de una clase personalizada, en el método -encodeWithCoder: debe hacer

[coder encodeObject:someArray forKey:@"someArray"]; 

y luego en el método -initWithCoder:

someArray = [[coder decodeObjectForKey:@"someArray"] retain]; 
20

¿Qué clase de objetos está almacenando en la matriz? Asegúrese de que todos los objetos almacenados en la matriz implementen el protocolo NSCoding.