3

我已经发布了我的应用程序的 1.0 版。1.1 版可能会包含某种迁移代码。为了论证的缘故,假设它将更新核心数据属性 - 所有姓氏都将转换为大写。我将在版本 1.1 中首次启动时执行此代码。

我是否需要为所有后续版本保留此代码?如果用户跳过 1.0 并且仅在 1.2 发布时更新,是否会自动先应用 1.1?还是我需要不断检查是否永远更新所有版本中的姓氏?

4

2 回答 2

2

你不发布更新,你发布新版本。如果有人从 1.0 更新到 1.2 并跳过 1.1,那么这正是正在发生的事情。1.1 永远不会被安装或执行。

编辑:

这是一个非常简单的更新管理方法的建议。可能不是最优雅的,但它确实有效。

NSString *lastVersion = [[NSUserDefaults standardUserDefaults]
                         stringForKey:@"LastVersion"];
NSString *currentVersion = [[NSBundle mainBundle]
            objectForInfoDictionaryKey:@"CFBundleShortVersionString"];

if ([self version:lastVersion isSmallerThanVersion:@"1.1"]) {
    // update from 1.0 to 1.1 here.
}
if ([self version:lastVersion isSmallerThanVersion:@"1.2"]) {
    // update from 1.1 to 1.2 here.
}
if ([self version:lastVersion isSmallerThanVersion:@"1.3"]) {
    // update from 1.2 to 1.3 here.
}

[[NSUserDefaults standardUserDefaults]
  setObject:currentVersion forKey:@"LastVersion"];

在此示例中,您有 4 个版本(1.0、1.1、1.2、1.3),而 1.3 是最新版本。

您在每次启动应用程序时运行它。由于更新应用程序也会终止它,您可以假设这将在可能的更新后运行。

基本上,您从用户默认值加载用户在此设备上使用的最后一个版本。如果应用程序第一次启动,则不会有已知的先前版本,不会执行任何更新例程,并且当前版本 (1.3) 会保存为最后使用的版本。

如果应用程序与以前的版本 (1.2) 一起使用,lastVersion则将是1.2并且仅执行最后一个if块。

如果应用程序在 1.1 版本中使用,但跳过了 1.2,现在更新到 1.3,lastVersion则将是 1.1,最后两个if块按顺序执行。因此,首先您将数据从 1.1 更新到 1.2,然后从 1.2 更新到 1.3。

于 2012-11-18T01:20:00.597 回答
2

您应该保留所有版本 > 1.0 的迁移代码

于 2012-11-18T01:24:19.080 回答