我无法采用NSSsecureCoding 。 我编码了一个包含我自定义类别对象的阵列, 它正确采用了 < code> NSSecureCoding /code。 当我解码它, 通过该类 < code> NSAray (是我编码的对象的类别) 时, 它会扔出一个例外。 但是, 当 < em> 与字符串完全相同的东西 em > 使用一系列字符串时, 它会工作正常。 我看不出我的班级和NSString有什么区别 。
#import <Foundation/Foundation.h>
@interface Foo : NSObject <NSSecureCoding>
@end
@implementation Foo
- (id)initWithCoder:(NSCoder *)aDecoder {
return [super init];
}
- (void)encodeWithCoder:(NSCoder *)aCoder {
}
+ (BOOL)supportsSecureCoding {
return YES;
}
@end
int main() {
@autoreleasepool {
NSMutableData* data = [[NSMutableData alloc] init];
NSKeyedArchiver* archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:@[[Foo new]] forKey:@"foo"];
[archiver encodeObject:@[@"bar"] forKey:@"bar"];
[archiver finishEncoding];
NSKeyedUnarchiver* unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
unarchiver.requiresSecureCoding = YES;
// throws exception: value for key NS.objects was of unexpected class Foo . Allowed classes are {( NSArray )} .
[unarchiver decodeObjectOfClass:[NSArray class] forKey:@"foo"];
// but this line works fine:
[unarchiver decodeObjectOfClass:[NSArray class] forKey:@"bar"];
[unarchiver finishDecoding];
}
return 0;
}