NSSecureCoding-Fehler bei Auflistungen benutzerdefinierter Klassen
Ich habe Probleme mit der Übernahme von NSSecureCoding. Ich codiere ein Array, das Objekte meiner benutzerdefinierten Klasse enthält, die übernommen werdenNSSecureCoding
richtig. Wenn ich es dekodiere, passiere ich die KlasseNSArray
(das ist die Klasse des Objekts, das ich codiert habe), löst es eine Ausnahme aus. Wann jedoch tun diegenau das gleiche Mit einer Reihe von Zeichenfolgen funktioniert es einwandfrei. Ich kann den Unterschied zwischen meiner Klasse und NSString nicht erkennen.
#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;
}