2

我正在使用NSCoding对我的对象进行编码并将它们作为“缓存”功能保存到磁盘,而不必在每次启动我的应用程序时下载数据。现在,我将此数据保存在应用程序的 Documents 文件夹中,更新应用程序时不会删除我已阅读的数据。

所以我担心的是我对我的类做了一些更新,比如添加一个实例变量。然后将应用程序上传到 App Store。因此,当用户更新到新版本时,保存在 Documents 文件夹中的旧对象在没有我在新版本中添加的新实例变量的情况下进行编码。这样当我的应用程序在启动期间尝试解码保存的对象时,它会失败,因为 Documents 文件夹中的“旧”对象没有使用这个新变量编码?

我将如何处理这个问题?确保我从一开始就“正确”地写我的课程?我确信我最终将需要修改我的一个类,然后破坏磁盘上保存的旧对象。

4

2 回答 2

2

当您决定新版本时,请更改对象的文件名或编码键。

例如,如果您现在将集合中的对象保存到“myObjectsFile”,当您有新版本时,请使用文件名“myObjectsFile2”。当您的应用程序启动时,检查“myObjectsFile”是否存在,加载您的旧对象并将它们迁移到新的对象版本,然后将这些迁移的对象保存到“myObjectFile2”并删除“myObjectFile”。

在下一次启动时,您已准备就绪,因为您已删除“myObjectsFile”。

于 2011-10-30T22:57:20.680 回答
0

您可以通过拥有一个您保证始终存在的版本属性来对您的对象进行版本控制。

从磁盘加载对象后,除了检查版本属性之外不要做任何事情。(您也可以先检查是否存在版本属性。)如果您当前的代码库不支持您的对象的版本,只需将其丢弃。

于 2011-10-30T22:39:31.067 回答