iphone nsarray nskeyedarchiver gamekit

iphone - Codifique NSArray o NSDictionary utilizando NSCoder



nskeyedarchiver gamekit (3)

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

Me preguntaba si es posible usar el método NSCoder:

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

para codificar una instancia de NSArray o NSDictionary. Si no, ¿cómo vas a codificarlos? Estoy tratando de 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 junto con el entero de tipo paquete, pero no los datos en la matriz que parece.

¡Gracias por adelantado!


NSKeyedArchiver / Unarchiver debe codificar y descodificar NSArrays y NSDictionaries sin ningún problema. Si su clase de paquete que ha creado implementa el protocolo NSCoding, debe llamar explícitamente a [encodeObject: myNsArray forKey:@"stringsArray"] en su método -encodeWithCoder: (asumiendo que myNsArray es el nombre de la variable de instancia en su objeto de paquete quieres 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 a quién cuando codifica / decodifica.


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

NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:someArray];

o

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

Si es una variable de instancia de una clase personalizada, en el método -encodeWithCoder: debería hacerlo

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

y luego en el método -initWithCoder:

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