【问题标题】:Unarchiving data with new NSKeyedUnarchiver APIs while failed to satisfied unarchivedObjectOfClass it required使用新的 NSKeyedUnarchiver API 取消归档数据,但未能满足所需的 unarchivedObjectOfClass
【发布时间】: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


    【解决方案1】:

    我错了,我意识到我没有在 NSSet 中包含 NSArray class,这就是抱怨的来源。

    【讨论】:

      猜你喜欢
      • 2018-12-31
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 2021-07-01
      相关资源
      最近更新 更多