【发布时间】:2021-08-08 07:47:34
【问题描述】:
首先,我要感谢大家阅读了该消息并以任何形式给我反馈。
这就是我想要做的。将 Objective-c 中已弃用的 API [NSKeyedUnarchiver unarchiveObjectWithData:myProfileData]; 替换为 iOS 12 新 API unarchivedObject<DecodedObjectType>(ofClass: DecodedObjectType.Type, from: Data) -> DecodedObjectType?
我使用旧的 NSKeyedUnarchived API 取消归档数据,打印出来,这是我得到的:
assets = {
"albums" = {
"more_Album" = 0;
photos = (
);
};
"shared_connections" = "<null>";
}
我的第一次尝试是打击,因为我知道我将数据归档为字典,所以我必须使用相同的类类型取消归档:
NSError *error = nil;
NSDictionary *dictionary = [NSKeyedUnarchiver unarchivedObjectOfClass:[NSDictionary class] fromData:myData error:&error];
但是错误信息显示:
Error Domain=NSCocoaErrorDomain Code=4864 "value for key 'NS.objects' was of unexpected class 'NSNull (0x11c39fe80).
Allowed classes are '{(
"NSDictionary (0x11c39fa48)
)}
我想可能是因为我没有在 unarchivedObjectOfClass 中包含 [NSNull class] 导致失败。为了满足吐槽,我继续发了一组unarchivedObject of classes:
NSError *error = nil;
NSSet *classSet = [NSSet setWithObjects:[NSDictionary class], [NSNull class], nil];
NSDictionary *dictionary = [NSKeyedUnarchiver unarchivedObjectOfClasses:classSet fromData:myData error:&error];
很遗憾,又失败了。
Error Domain=NSCocoaErrorDomain Code=4864 "value for key 'NS.objects' was of unexpected class 'NSArray (0x11e79f778)
Allowed classes are '{(
"NSDictionary (0x11e79fa48) ,
"NSNull (0x11e79fe80) )}'
我不确定在使用新的 NSKeyedUnarchiver API 时处理字典中的 Null 值的正确方法是什么。
【问题讨论】:
标签: ios swift objective-c deprecated nskeyedunarchiver