ios - 不同 iOS 版本上的 NSKeyedArchiver/NSKeyedUnarchiver 兼容性

标签 ios serialization compatibility nskeyedarchiver

在 iOS 应用程序中,我们通过 NSKeyedArchiver/NSKeyedUnarchiver 使用复杂对象的序列化来存储信息和数据。

因此应用程序将在应用程序包中包含这样一个序列化对象,并且该文件将在一个特定的 iOS 版本(假设是 iOS 5.0)下创建

由于该应用程序将在不同的 iOS 版本(> 5.0)上运行,甚至在未来的版本中,我们希望确保应用程序包中包含的原始序列化对象在所有其他 iOS(6.1 , 7.0, ...)

假设要序列化的复杂对象由其类包含在所有这些 iOS 版本的 SDK 中的对象组成(为简单起见,我们假设这些类将来不会弃用), 我们能完全确定它始终与所有 iOS 兼容吗?

最佳答案

一般来说,是的。

要绝对 100% 确定您需要使用所有自定义对象,然后您才能完全控制存档/取消存档过程。但是,只要所有类都适本地使用键控归档器的编码和解码方法,那么一切都将在未来兼容。

如果 Apple 出于某种原因确实决定打破这一点,您最好的选择是捕获由此产生的异常并通知用户他们需要升级应用。

您的替代方法是以不同的格式(如 JSON,可能是压缩的)存储初始部署数据,然后在应用程序启动时,如果您有现有版本,请使用它,如果没有,请读入初始部署数据。

关于ios - 不同 iOS 版本上的 NSKeyedArchiver/NSKeyedUnarchiver 兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16538581/

相关文章:

ios - 如何在 UIToolBar 上获取 UIBarButtonSystemItem 以将我带到另一个 View

ios - 我应该使用什么约束来让 ImageView 方面填充其父 View 的下半部分?

java - 使用 Ehcache 自定义序列化

C# 序列化包含更多列表的对象列表

android - InApp Purchase 内容在多个移动平台(iOS 和 Android)上的兼容性。

c# - 在 Xamarin 中的 UI 和代码模块之间传递值的最佳方式

ios - touchesBegan 不在 UITableView 上工作

c - 使用序列化二叉搜索树对海量数据进行排序

internet-explorer - IE11文档模式默认为IE7。如何重置?

android - 来自后台堆栈的 fragment onResume