[objective-c]意外的类同时编码解码与 NSSecureCoding NSArray 的误差

标签: ios Objective-C
发布时间: 2016/10/2 2:14:12
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

背景

我们有多个类,符合 NSSecureCoding Protocol。

@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',原因: ' 键 'NS.objects' 值是意外类 'classa 设置'。允许类是 ' {(
NSArray
)}'.'

谁能解释为什么,是否有可能解决这一问题?

编辑

我觉得我弄清楚。请参阅我答案在这以下的职位。祝你好运 ~

奇怪的某些行为时解码通过 NSSecureCoding NSArray

解决方法 1:

NSCoder提供一种额外的方法 decodeObjectOfClasses:forKey: ,在那里可以通过一组预期的对象。这样就可以解码嵌套的结构。

只是通过一组与 NSArrayClassAClassB 类︰

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