Я дізнався одну альтернативу, перш ніж зберегти, кодую кореневий об’єкт ( 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;
}
У кого є краще рішення?
Дякую всім.