NskeyEdarchiver ArchivedDatawithRootrootobject:
-
04-10-2019 - |
Вопрос
Параметр для Nskeyedarchiver ArchivedDatawithRootobject: должен быть массив, который я пытаюсь сохранить, или массив преобразован в NSDATA?
Решение
Преобразовать общий массив на NSData
, Вам нужен архиватор! Если вы знаете, как кормить NSData
, вы знаете, как использовать NSKeyedArchiver
. Отказ Так:
NSArray* array= ... ;
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array];
Конечно, все элементы в вашем array
нужно реализовать encodeWithCoder:
.
Другие советы
Ответ Yuji прав. Но точнее, ваш элемент массива должен реализовать протокол и заполнить свой собственный код для методов INITWITHCODER: и ENCODWITHCODER: вроде:
- (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"];
}
Затем вы можете использовать архиватор и Uncariver вроде:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:notes];
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"notes"];
NSData *notesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"notes"];
NSArray *notes = [NSKeyedUnarchiver unarchiveObjectWithData:notesData];
Для большего, вы можете получить ссылку "Архивирование объектов объектов-C с Nscoding".
Не связан с StackOverflow