2012-05-17 57 views
1

所以我试图实现NSKeyedUnarchiver时发生异常,因为我试图用NSUsersDefaults保存一组自定义对象。因为我不断收到一个错误,说我有非属性,所以我决定将它们归档为NSData。现在我收到这个错误:“难以理解的存档”。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,而不是每个对象。然后,当您将其解压缩时,再次将其解压缩到数组中。

+0

当我将它更改为上面的当前代码时,它仍然给我同样的错误。我确实有编码方法。 – ManOx

+0

请参阅我的编辑.... – borrrden

+0

我也试过,它为我的对象返回null。 – ManOx