gpt4 book ai didi

ios - 通过 NSSecureCoding 解码 NSArray 时的奇怪行为

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

我整个下午都在用头撞墙试图弄清楚为什么这个类的解码失败。该类有一个属性是 Foo 对象的 NSArray。 Foo 符合 NSSecureCoding,我已经成功地自行编码和解码了该类。我在 initWithCoder 中收到一个错误:表示未能解码类 Foo。通过一些实验,我发现我需要将 [Foo class] 添加到 initWithCoder: 才能使其工作。也许这会帮助遇到同样问题的其他人。我的问题是,为什么这是必要的?我没有发现苹果文档中有必要这样做的建议。

#import "Foo.h"

@interface MyClass : NSObject <NSSecureCoding>
@property (nonatomic) NSArray *bunchOfFoos;
@end

@implementation MyClass

static NSString *kKeyFoo = @"kKeyFoo";

+ (BOOL) supportsSecureCoding
{
return YES;
}

- (void) encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:self.bunchOfFoos forKey:kKeyFoo];
}

- (id) initWithCoder:(NSCoder *)decoder
{
if (self = [super init])
{
[Foo class]; // Without this, decoding fails
_bunchOfFoos = [decoder decodeObjectOfClass:[NSArray class] forKey:kKeyFoo];
}
return self;
}

@end

最佳答案

对于那些仍在为此苦苦挣扎的人:@Ben H 的解决方案没有解决我的问题。我一直收到以下错误消息:

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

最后,对于自定义类,我意识到了这一点。您必须改用以下函数 decodeObjectOfClasses :

- (id)decodeObjectOfClasses:(NSSet *)classes forKey:(NSString *)key

然后您将 NSArray 中所有可能类的 NSSet 传递给上面的函数!我不确定为什么@Ben H 可以通过简单地在函数外添加一个 [Foo class] 来解决这个问题。也许这是一个编译器问题。但无论如何,如果他的解决方案不起作用,也可以试试这个。

关于ios - 通过 NSSecureCoding 解码 NSArray 时的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19579143/

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