Я обнаружил одну альтернативу, перед сохранением кодирую корневой объект ( NSArray
объект) с помощью NSKeyedArchiver
, который заканчивается на NSData
. Затем используйте UserDefaults сохранить NSData
.
Когда мне нужны данные, я считываю NSData
и использую NSKeyedUnarchiver
для преобразования NSData
обратно в объект.
Это немного громоздко, потому что мне нужно конвертировать в / из NSData
каждый раз, но это просто работает.
Вот один пример для каждого запроса:
Сохранить:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *arr = ... ; // set value
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:arr];
[defaults setObject:data forKey:@"theKey"];
[defaults synchronize];
Загрузить:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:@"theKey"];
NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithData:data];
Элемент в массиве реализует
@interface CommentItem : NSObject<NSCoding> {
NSString *value;
}
Затем в реализации CommentItem
предусмотрены два метода:
-(void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:value forKey:@"Value"];
}
-(id)initWithCoder:(NSCoder *)decoder
{
self.value = [decoder decodeObjectForKey:@"Value"];
return self;
}
У кого-нибудь есть лучшее решение?
Спасибо всем.