微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在iOS中使用安全编码取消存档自定义对象

如何解决在iOS中使用安全编码取消存档自定义对象

我正在像这样成功编码符合NSSecureCoding的对象数组。

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array requiringSecureCoding:YES error:nil];

如何取消存档这些数据?我正在尝试这样,但是返回nil。

NSError *error = nil;
NSArray<MyClass *> *array = [NSKeyedUnarchiver unarchivedobjectOfClass:[NSArray class] fromData:data error:&error];

这是它返回的错误

由于数据格式不正确,因此无法读取。

解决方法

这是一个简单的例子

@interface Secure:NSObject<NSSecureCoding> {
    NSString* name;
}
@property NSString* name;
@end

@implementation Secure
@synthesize name;

// Confirms to NSSecureCoding
+ (BOOL)supportsSecureCoding {
    return true;
}

- (void)encodeWithCoder:(nonnull NSCoder *)coder {
    [coder encodeObject:self.name forKey: @"name"];
}

- (nullable instancetype)initWithCoder:(nonnull NSCoder *)coder {
    self = [self init];
    if (self){
        self.name = [coder decodeObjectOfClass:[NSString class] forKey:@"name"];
    }
    return  self;
}

@end

用法

Secure *archive = [[Secure alloc] init];
    archive.name = @"ARC";
NSArray* array = @[archive];
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array requiringSecureCoding:YES error:nil];
NSArray<Secure *> *unarchive = [NSKeyedUnarchiver unarchivedObjectOfClass:[NSObject class] fromData:data error:nil];
NSLog(@"%@",unarchive.firstObject.name);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。