NSData Exception - "непонятный архив"
Так что я получил исключение при попытке реализовать NSKeyedUnarchiver
потому что я пытаюсь сохранить массив пользовательских объектов с NSUsersDefaults
, Поскольку я продолжал получать сообщение об ошибке, говоря, что у меня не было свойств, я решил заархивировать их в NSData
, Теперь я получаю эту ошибку: "непонятный архив".
Вот как я архивирую (я проверил все объекты, чтобы быть нулем, не из них):
NSMutableArray *array = [[NSMutableArray alloc] initWithArray:anotherArray];
for (int i = 0; i < array.count; i++) {
CustomObj *obj = [array objectAtIndex:i];
NSData *newdata = [NSKeyedArchiver archivedDataWithRootObject:obj];
[array replaceObjectAtIndex:i withObject:newdata];
}
NSArray *newArray = [[NSArray alloc] initWithArray:array];
[coder setObject:newArray forKey:@"key"];
Вот как я разархивирую (опять все проверяется на ноль):
if (!arrayM) { arrayM = [[NSMutableArray alloc] init]; NSLog(@"initialized"); }
else {
for (int i = 0; i < arrayM.count; i++) {
NSData *data = [arrayM objectAtIndex:i];
--> The exception happens here: CustomObj *obj = [NSKeyedUnarchiver unarchiveObjectWithData:data];
[arrayM replaceObjectAtIndex:i withObject:obj];
}
}
1 ответ
Вы не архивировали его с помощью NSKeyedArchiver, так почему вы ожидаете, что сможете использовать NSKeyedUnarchiver, чтобы получить данные обратно? То, как вы хотите это сделать, вот так. Приведите ваш пользовательский объект в соответствие с протоколом NSCoding и реализуйте его два метода (кодирование и декодирование). Затем вы можете архивировать с помощью NSKeyedArchiver для вашего массива пользовательских объектов. NSKeyedArchiver будет вызывать encodeWithCoder для каждого объекта и любых объектов, которые он содержит (если это коллекция).
РЕДАКТИРОВАТЬ: вызвать NSKeyedArchiver для массива, а не для каждого объекта. Затем, когда вы разархивируете его, снова разархивируйте его в массив.