簡體   English   中英

在 iOS 中使用安全編碼解壓自定義對象

[英]Unarchive custom object with secure coding in iOS

我正在像這樣成功地編碼符合NSSecureCoding的對象數組。

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array requiringSecureCoding:YES error: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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM