Descubrí una alternativa, antes de guardar, codifico el objeto raíz ( NSArray
objeto) usando NSKeyedArchiver
, que termina con NSData
. Luego use UserDefaults y guarde el NSData
.
Cuando necesito los datos, leo NSData
y utilizo NSKeyedUnarchiver
para NSData
volver a convertir el objeto.
Es un poco engorroso, porque necesito convertir a / de NSData
cada vez, pero simplemente funciona.
Aquí hay un ejemplo por solicitud:
Salvar:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *arr = ... ; // set value
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:arr];
[defaults setObject:data forKey:@"theKey"];
[defaults synchronize];
Carga:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:@"theKey"];
NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithData:data];
El elemento en la matriz implementa
@interface CommentItem : NSObject<NSCoding> {
NSString *value;
}
Luego, en la implementación de CommentItem
, proporciona dos métodos:
-(void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:value forKey:@"Value"];
}
-(id)initWithCoder:(NSCoder *)decoder
{
self.value = [decoder decodeObjectForKey:@"Value"];
return self;
}
¿Alguien tiene una mejor solución?
Gracias a todos.