iOS macOS OC 'unarchiveObjectWithData:' is deprecated: first deprecated in iOS 12.0 - Use +unarchivedObjectOfClass:fromData:error: instead
'unarchiveObjectWithData:' is deprecated: first deprecated in iOS 12.0 - Use +unarchivedObjectOfClass:fromData:error: instead
在 iOS 开发中,随着版本的更新,一些 API 可能会被标记为废弃(deprecated),这意味着在未来的版本中这些 API 可能会被移除,或者它们的行为可能会发生变化。对于你提到的 unarchiveObjectWithData:
方法,它在 iOS 12.0 及以后的版本中已被废弃,建议使用新的方法 unarchivedObjectOfClass:fromData:error:
来替代。
为什么需要替换?
- 安全性:新的方法可能提供了更好的安全性保障,比如对反序列化过程中可能发生的错误进行更详细的错误处理。
- 兼容性:随着 iOS 版本的更新,继续使用废弃的 API 可能会导致应用程序在未来版本的 iOS 上无法正常工作。
- 维护性:使用官方推荐的新方法可以使代码更加清晰,易于维护,并且能够享受到新方法带来的性能优化和特性更新。
如何替换?
如果你之前使用 unarchiveObjectWithData:
来反序列化数据,你可以按照以下步骤替换为 unarchivedObjectOfClass:fromData:error:
:
-
确定类类型:你需要知道要反序列化的对象的确切类类型。
unarchivedObjectOfClass:fromData:error:
方法需要这个信息作为第一个参数。 -
处理错误:新方法提供了错误处理机制。你需要准备一个
NSError
类型的变量来接收可能发生的错误。 -
调用新方法:使用新方法替换旧的调用。例如,如果你之前这样写:
-
NSData *data = ...; // 假设这是你要反序列化的数据 YourClass *object = [NSKeyedUnarchiver unarchiveObjectWithData:data];
你可以替换为:
-
NSData *data = ...; // 假设这是你要反序列化的数据 YourClass *object = nil; NSError *error = nil; object = [NSKeyedUnarchiver unarchivedObjectOfClass:[YourClass class] fromData:data error:&error]; if (error) { // 处理错误 NSLog(@"Error unarchiving: %@", error); }
注意事项
- 确保你的类(
YourClass
)遵守了NSCoding
协议,并且实现了encodeWithCoder:
和initWithCoder:
方法,这是进行归档和反归档所必需的。 - 检查你的应用程序是否还有其他地方使用了
NSKeyedUnarchiver
的其他废弃方法,并相应地更新它们。 - 在进行此类更改时,请确保在支持的 iOS 版本上测试你的应用程序,以确保一切正常。
- 确保你的类(