我整个下午都在用头撞墙,试图弄清楚为什么这个类的解码失败了。该类有一个属性,它是 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