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

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

所以应用程序将在应用程序包中包含这样一个序列化的对象,并且这个文件将在一个特定的iOS版本下创build(比如说iOS 5.0)

由于应用程序将在不同的iOS版本(> 5.0)上运行,甚至在将来的版本中运行,所以我们要确保应用程序包中包含的原始序列化对象在每个其他iOS(6.1,7.0, …)

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

一般来说,是的。

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

如果苹果因为某种原因决定打破这种情况,那么最好的select就是捕获产生的exception,并通知用户他们将需要升级到应用程序。

另一种方法是将数据的初始部署以不同的格式(如JSON,也许是压缩的)存储起来,然后在应用程序启动的时候存储一个现有的版本,如果没有的话,读入初始部署数据。