我正在使用NSCoding
对我的对象进行编码并将其作为“缓存”功能保存到磁盘,而不是每次启动应用程序时都不必下载数据。现在我将这些数据保存在应用程序的Documents文件夹中,更新应用程序时我没有删除该文件。
所以我担心的是我对我的类做了一些更新,比如添加一个实例变量。然后将应用程序上传到App Store。因此,当用户更新到新版本时,保存在Documents文件夹中的旧对象将被编码,而不使用我在新版本中添加的新实例变量。因此,当我的应用程序尝试在启动期间解码保存的对象时,它将失败,因为Documents文件夹中的“旧”对象未使用此新变量进行编码?
我该如何处理这个问题?确保我从一开始就“正确”编写课程?我确信我最终需要修改我的一个类,然后打破磁盘上旧的保存对象。
答案 0 :(得分:2)
决定新版本时,请更改对象的文件名或编码键。
例如,如果您现在将集合中的对象保存为“myObjectsFile”,则在使用新版本时,请使用文件名“myObjectsFile2”。当您的应用程序启动时,检查“myObjectsFile”是否存在加载旧对象并将其迁移到新对象版本,然后将这些迁移的对象保存到“myObjectFile2”并删除“myObjectFile”。
在下次启动时,你已经完成了设置,因为你删除了'myObjectsFile'。
答案 1 :(得分:0)
你可以通过拥有一个你保证永远在那里的版本属性来对你的对象进行版本化。
从磁盘加载对象后,除了检查版本属性外,不要执行任何操作。 (您还可以先检查版本属性是否存在。)如果您当前的代码库不支持您的对象版本,只需将其丢弃即可。