Dziwne zachowanie podczas dekodowania NSArray przez NSSecureCoding
całe popołudnie waliłem głową o ścianę, próbując zrozumieć, dlaczego dekodowanie tej klasy zawodziło. klasa ma właściwość NSArray obiektów Foo. Foo jest zgodne z NSSecureCoding, a ja z powodzeniem kodowałem i dekodowałem tę klasę samodzielnie. Wystąpił błąd w initWithCoder: że nie udało się zdekodować klasy Foo. dzięki pewnym eksperymentom odkryłem, że muszę dodać [klasę Foo] do initWithCoder: aby działała. może to pomoże komuś, kto ma ten sam problem. moje pytanie brzmi: dlaczego to jest konieczne? nie znalazłem sugestii, że jest to konieczne w dokumentacji 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