gpt4 book ai didi

ios - 使用 NSSecureCoding 编码/解码 NSArray 时出现意外类错误

转载 作者:可可西里 更新时间:2023-11-01 03:45:43 26 4
gpt4 key购买 nike

背景

我们有多个符合 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"];

我收到以下错误消息。

Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'value for key 'NS.objects' was of unexpected class 'ClassA'. Allowed classes are '{(
NSArray
)}'.'

任何人都可以解释为什么以及是否可以解决此问题?

最佳答案

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

只需传递一个包含 NSArray 以及您的 ClassAClassB 类的集合:

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

关于ios - 使用 NSSecureCoding 编码/解码 NSArray 时出现意外类错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26658279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com