【问题标题】:Objective-C – Using NSCoding and updating your app to the App StoreObjective-C – 使用 NSCoding 并将您的应用程序更新到 App Store
【发布时间】:2011-10-30 22:34:37
【问题描述】:

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

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

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

【问题讨论】:

    标签: objective-c cocoa-touch app-store nscoding


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2012-01-27
        • 1970-01-01
        • 1970-01-01
        • 2015-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多