因此我在尝试实现NSKeyedUnarchiver
时遇到异常,因为我正在尝试使用NSUsersDefaults
保存自定义对象数组。因为我继续收到错误,说我有非属性,所以我决定将它们归档到NSData
。现在我收到了这个错误:“难以理解的存档”。
以下是我的归档方式(我已经测试了所有对象为null,而不是它们):
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"];
以下是我取消归档的方式(再次测试所有内容都为null):
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];
}
}
答案 0 :(得分:1)
您没有使用NSKeyedArchiver存档它,那么为什么您希望能够使用NSKeyedUnarchiver来获取数据呢?你想要的方式是这样的。使您的自定义对象符合NSCoding协议,并实现其两种方法(编码和解码)。然后,您可以在自定义对象数组上使用NSKeyedArchiver进行存档。 NSKeyedArchiver将在每个对象及其包含的任何对象(如果它是一个集合)上调用encodeWithCoder。
编辑:在数组上调用NSKeyedArchiver,而不是每个对象。然后当你取消归档它时,再次将它解压缩成一个数组。