tôi đã dành tất cả các buổi chiều đập đầu vào tường cố gắng tìm ra lý do tại sao giải mã của lớp này đã thất bại. lớp này có một thuộc tính là một NSArray của các đối tượng Foo. Foo tuân theo NSSecureCoding và tôi đã tự mã hóa và giải mã thành công lớp đó. tôi đã nhận được một lỗi trong initWithCoder: mà nói không giải mã lớp Foo. thông qua một số thử nghiệm, tôi phát hiện ra rằng tôi cần thêm [Foo class] vào initWithCoder: để nó hoạt động. có thể điều này sẽ giúp người khác có cùng vấn đề. câu hỏi của tôi là, tại sao điều này lại cần thiết? tôi thấy không có gợi ý rằng điều này là cần thiết trong tài liệu của apple.Hành vi lạ khi giải mã một NSArray qua NSSecureCoding
#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
Tôi nghĩ rằng đối với những gì bạn đang cố gắng hoàn thành, bạn cần triển khai mã hóa/giải mã trong lớp Foo. – zaph
có, tôi đã nói rằng Foo tuân theo NSSecureCoding, nghĩa là mã hóa/giải mã đã được triển khai trong lớp đó. –