Objective c 解决`+;[NSKeyedUnarchiver unarchiveTopLevelObjectWithData:error:`弃用导致';无法获取数据’;不可阅读';错误
我有这个代码,它可以工作:Objective c 解决`+;[NSKeyedUnarchiver unarchiveTopLevelObjectWithData:error:`弃用导致';无法获取数据’;不可阅读';错误,objective-c,nscoding,Objective C,Nscoding,我有这个代码,它可以工作: Foo *foo = [NSKeyedUnarchiver unarchiveTopLevelObjectWithData:data error:&error]; 然而,它给了我一个警告: “unarchiveTopLevelObjectWithData:error:”已弃用:在iOS 12.0中首次弃用-改用+UnarchiveObjectOfClass:fromData:error: 当我尝试用以下方法进行简单替换时: Foo *foo = [NSKey
Foo *foo = [NSKeyedUnarchiver unarchiveTopLevelObjectWithData:data error:&error];
然而,它给了我一个警告:
“unarchiveTopLevelObjectWithData:error:”已弃用:在iOS 12.0中首次弃用-改用+UnarchiveObjectOfClass:fromData:error:
当我尝试用以下方法进行简单替换时:
Foo *foo = [NSKeyedUnarchiver unarchivedObjectOfClass:[Foo class] fromData:data error:&error];
。。。它失败,出现以下错误:
无法读取数据,因为它的格式不正确
如何用未弃用的方法正确替换此弃用的方法?这可能是因为您的对象符合
NSCoding
,但它应该符合NSSecureCoding
如果查看for unarchivedObjectOfClass:fromData:error:,您会注意到它说:
重要确保在解码的类型中采用了NSSecureCodeding。如果对解码前缀方法的任何调用失败,默认的decodingFailurePolicy将设置错误,而不是引发异常。在这种情况下,当前和所有后续解码调用返回0或nil 因此,您需要执行以下操作才能切换到未弃用的函数:
[NSKeyedUnarchiver unarchivedoplevelobjectwithdata:data error:&error]
切换到[NSKeyedUnarchiver unarchivedObjectOfClass:[Foo class]fromData:data error:&error]
NSCoding
切换到NSSecureCoding
@property (class, readonly) BOOL supportsSecureCoding;
+ (BOOL)supportsSecureCoding {
return YES;
}
NSCoding
的属性,请对其重复所有这些步骤,以便它们最终符合NSSecureCoding
。例如,如果有一个属性@property(非原子,强)条*Bar
在正在编码的Foo
对象上,您需要确保Bar
也符合NSSecureCoding
,而不仅仅是NSCoding
YES
):
NSCoding
切换到NSSecureCoding
,如果NSCoding
也被弃用,上述问题将更容易解决
[NSKeyedArchiver archivedDataWithRootObject:self requiringSecureCoding:YES error:&error];