Es el parámetro para NSKeyedArchiver archivedDataWithRootObject: ¿se supone que es la matriz que estoy intentando guardar o la matriz convertida en NSData?NSKeyedArchiver archivedDataWithRootObject:
6
A
Respuesta
12
Para convertir una matriz genérica en NSData
, necesita un archivador. Si sabe cómo alimentar el NSData
, sabe cómo usar NSKeyedArchiver
. Por lo tanto:
NSArray* array= ... ;
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array];
Por supuesto, todos los elementos en sus necesidades para implementar array
encodeWithCoder:
.
13
La respuesta de Yuji es correcta. pero con mayor precisión, el elemento de una matriz tienen que implementar el protocolo y FILL su propio código para métodos initWithCoder: y encodeWithCoder: como:
- (id)initWithCoder:(NSCoder *)decoder {
if (self = [super init]) {
self.title = [decoder decodeObjectForKey:@"title"];
self.author = [decoder decodeObjectForKey:@"author"];
self.published = [decoder decodeBoolForKey:@"published"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:title forKey:@"time"];
[encoder encodeObject:author forKey:@"author"];
[encoder encodeBool:published forKey:@"published"];
}
continuación, puede utilizar el archivador y unchariver como:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:notes];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"notes"];
NSData *notesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"notes"];
NSArray *notes = [NSKeyedUnarchiver unarchiveObjectWithData:notesData];
Para obtener más información, puede obtener la referencia "Archiving Objective-C Objects with NSCoding".
Cuestiones relacionadas
- 1. ¿Qué formato guarda NSKeyedArchiver?
- 2. NSArchiver vs. NSKeyedArchiver
- 3. NSData de NSKeyedArchiver a NSString
- 4. NSKeyedArchiver/NSuserDefaults - guardar un CGRect
- 5. Cargando el estado de Singleton desde NSKeyedArchiver
- 6. NSKeyedArchiver falla con CLLocationCoordinate2D structs. ¿Por qué?
- 7. NSKeyedArchiver escribir XML (u otra legible para humanos)?
- 8. Cómo codificar y decodificar una clase personalizada con NSKeyedArchiver
- 9. Uso de NSKeyedArchiver para almacenar el modelo de datos personalizado
- 10. Cómo resolver la advertencia de NSKeyedArchiver: reemplazar el valor existente
- 11. Almacenamiento de datos json en el iPhone: guarde la cadena json como es VS haga un objeto de json y use NSCoding + NSKeyedArchiver
- 12. reorganizando las filas de la tabla arrastrando en Lion
- 13. Aplicación que informa uso/almacenamiento incorrectos
- 14. ¿Cómo registrar un UTI/tipo de archivo no documentado para que OSX lo reconozca?
- 15. Cómo crear una copia de uiview (no un puntero a la vista original)
- 16. NSObject en NSData
- 17. ¿Cómo codificar un bloque Objective-c?
- 18. NSCoding VS Core data
- 19. Cómo almacenar objetos personalizados con struct en Coredata
- 20. Necesito ayuda en Bump Api enviando imágenes
- 21. ¿Cómo probar la unidad NSCoding?
- 22. ¿Cómo pasar NSData como NSString y recuperarlo?
- 23. NSKeyedUnarchiver: ¿borrar datos decodificados?
- 24. La mejor manera de almacenar datos en caché en Android
- 25. NSKeyedUnarchiver unarchiveObjectWithFile: devuelve nil en init: método
- 26. ¿Explorar los archivos creados en un dispositivo por la aplicación IOS que estoy desarrollando, en la estación de trabajo?
- 27. iPhone: ¿Cómo puedo almacenar UIImage usando NSUserDefaults?
- 28. iPhone - ¿Por qué la documentación dice que UIImageView es compatible con NSCoding?
- 29. En initWithCoder: ¿cuáles son las claves en el NSCoder (un UINibDecoder)? (para UIImageView)
- 30. iPhone: envío de datos de gran tamaño con Game Kit
Para completar, utiliza un NSKeyedUnarchiver para hacer lo contrario. –
"todos los elementos en su matriz necesitan implementar encodeWithCoder:" <- esto solo es necesario para objetos personalizados? –
todos los elementos de su matriz deben tener una implementación de 'encodeWithCoder:', ya sea por Apple o por usted. Puede verificar si un objeto suministrado por Apple lo implementa o no al echar un vistazo a la documentación oficial ... ver si implementa el protocolo 'NSCoder'. – Yuji