使用新的 NSKeyedUnarchiver API 取消归档数据,但未能满足所需的 unarchivedObjectOfClass
Posted
技术标签:
【中文标题】使用新的 NSKeyedUnarchiver API 取消归档数据,但未能满足所需的 unarchivedObjectOfClass【英文标题】:Unarchiving data with new NSKeyedUnarchiver APIs while failed to satisfied unarchivedObjectOfClass it required 【发布时间】: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
值的正确方法是什么。
【问题讨论】:
【参考方案1】:我错了,我意识到我没有在 NSSet 中包含 NSArray class
,这就是抱怨的来源。
【讨论】:
以上是关于使用新的 NSKeyedUnarchiver API 取消归档数据,但未能满足所需的 unarchivedObjectOfClass的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSKeyedUnarchiver 解码 URL 对象数组