2012-05-17 1 views
1

Так что я получил исключение при попытке реализовать NSKeyedUnarchiver, потому что я пытаюсь сохранить массив пользовательских объектов с помощью NSUsersDefaults. Поскольку я продолжал получать ошибку, говоря, что у меня были не-свойства, я решил архивировать их в NSData. Теперь я получаю эту ошибку: «непонятный архив».NSData Exception - «непонятный архив»

Вот как я архивирование (я проверил все объекты, чтобы быть пустыми, не из них):

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 для каждого объекта и любых объектов, которые он содержит (если это коллекция).

EDIT: Позвоните NSKeyedArchiver в массив , а не каждый объект. Затем, когда вы его разблокируете, снова распакуйте его в массив.

+0

Он по-прежнему дает мне ту же ошибку, когда я изменил ее на текущий код выше. И у меня есть методы кодирования. – ManOx

+0

См. Мое редактирование .... – borrrden

+0

Я тоже попробовал, он вернул null для моих объектов. – ManOx