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

questionAnswers(3)

yourAnswerToTheQuestion