使用NSSecureCoding对NSArray进行编码/解码时出现意外类错误

时间:2014-10-30 16:23:57

标签: ios objective-c

背景

我们有多个符合NSSecureCoding协议的类。

@interface ClassA : NSObject <NSSecureCoding>
// ...
@end

@interface ClassB : NSObject <NSSecureCoding>
// ...
@end

我们注意到NSArray也符合NSSecureCoding。因此,我们尝试以下方法。

用于编码:

NSArray* array = ...
[archiver encodeObject:array forKey:@"AirdropDataKey"];

用于解码

NSArray* array = [unarchiver decodeObjectOfClass:[NSArray class] 
                                          forKey:@"AirdropDataKey"];

我收到以下错误消息。

  

由于未捕获的异常'NSInvalidUnarchiveOperationException'而终止应用程序,原因:'key'NS.objects'的值是意外的类'ClassA'。允许的班级是'{(
  NSArray的
  )} ''

任何人都可以解释为什么以及是否有可能解决这个问题?

修改

我想我明白了。请参阅以下帖子中的我的anwser。祝你好运〜

Strange behavoir when decoding an NSArray via NSSecureCoding

2 个答案:

答案 0 :(得分:6)

NSCoder提供了另一种方法decodeObjectOfClasses:forKey:,其中可以传递一组预期对象。这允许解码嵌套结构。

只需传递一个包含NSArray和您的ClassAClassB类的内容:

NSSet *classes = [NSSet setWithObjects:[NSArray class], [ClassA class] ,[ClassB class], nil];
NSArray* array = [unarchiver decodeObjectOfClasses:classes forKey:@"AirdropDataKey"];

答案 1 :(得分:0)

对于method下方的解码使用,请检查: -

 - (id)decodeObjectForKey:(NSString *)key