я провел весь день, стуча головой о стену, пытаясь понять, почему декодирование этого класса не работает. у класса есть свойство, которое является 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