Descobri uma alternativa: antes de salvar, codifico o objeto raiz ( NSArray
objeto) usando NSKeyedArchiver
, que termina com NSData
. Em seguida, use UserDefaults e salve o NSData
.
Quando preciso dos dados, leio o NSData
e uso NSKeyedUnarchiver
para converter NSData
novamente no objeto.
É um pouco complicado, porque eu preciso converter de / para NSData
sempre, mas funciona.
Aqui está um exemplo por solicitação:
Salve :
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];
O elemento na matriz implementa
@interface CommentItem : NSObject<NSCoding> {
NSString *value;
}
Em seguida, na implementação de CommentItem
, fornece dois métodos:
-(void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:value forKey:@"Value"];
}
-(id)initWithCoder:(NSCoder *)decoder
{
self.value = [decoder decodeObjectForKey:@"Value"];
return self;
}
Alguém tem melhor solução?
Obrigado a todos.