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 для массива, а не для каждого объекта. Затем, когда вы разархивируете его, снова разархивируйте его в массив.

Другие вопросы по тегам