Странное поведение при декодировании NSArray через NSSecureCoding
Я провел весь день, стуча головой о стену, пытаясь понять, почему расшифровка этого класса не удалась. класс имеет свойство, которое является NSArray объектов Foo. Foo соответствует NSSecureCoding, и я успешно сам кодировал и декодировал этот класс. я получаю ошибку в initWithCoder: это говорит о том, что не удалось декодировать класс Foo. В результате некоторых экспериментов я обнаружил, что мне нужно добавить [класс Foo] в initWithCoder: чтобы он работал. может быть, это поможет кому-то еще, кто имеет ту же проблему. мой вопрос, зачем это нужно? я не нашел предположения, что это необходимо в документации Apple.
#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