私はすべての午後に、このクラスのデコーディングが失敗した理由を突きつけようと壁に頭をぶつけて過ごしました。クラスはFooオブジェクトのNSArrayであるプロパティを持っています。 FooはNSSecureCodingに準拠しており、私は正常にそのクラスをコード化してデコードしました。私はinitWithCoderでエラーを受け取りました:クラスFooを解読できませんでした。いくつかの実験を通して、私はinitWithCoderに[Foo class]を追加する必要があることを発見しました。多分これは、同じ問題を抱えている他の誰かを助けるでしょう。私の質問は、なぜこれが必要なのでしょうか?私はこれがリンゴのドキュメンテーションに必要であるという示唆は見つかりませんでした。NSSecureCodingでNSArrayをデコードするときの奇妙な振る舞い
#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
あなたが達成しようとしていることは、Fooクラスでエンコード/デコードを実装する必要があると思います。 – zaph
はい、FooはNSSecureCodingに準拠していると言いました。つまり、そのクラスでエンコード/デコードが実装されています。 –