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;
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage