我们有多个符合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
答案 0 :(得分:6)
NSCoder
提供了另一种方法decodeObjectOfClasses:forKey:
,其中可以传递一组预期对象。这允许解码嵌套结构。
只需传递一个包含NSArray
和您的ClassA
和ClassB
类的内容:
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