2

我的 iOS 应用程序中有一个方法可以在检测到我的服务器何时为我的应用程序提供更高版本(新的 ipa 版本)时更新应用程序。如果用户想要下载它,应用程序会在 iPad 上自行更新。

问题是,当应用程序第一次打开新版本时,我想从数据库中更新一些实体属性,但我不知道该怎么做。当我下载最新的 ipa 时,我无法调试它,因为 XCode 应用程序崩溃了。

我正在考虑在 AppDelegate.m 中做这样的事情:

if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"])
{
   //do the stuff i wanna do
}
else
{
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    // This is the first launch ever
}

但我不知道这个 [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"] 在更新之前是否设置为 YES,因为过程应该是:

1)有史以来第一次启动应用程序。2)应用程序检测到较新的版本。3)下载相同的应用程序->此时苹果将旧版本“替换”为新版本。4)打开较新版本的应用程序。5) 只在我第一次启动新版本时做我想做的事情。

4

2 回答 2

5

您可以使用存储在 NSUserDefaults 中的整数,并为应用程序的每个版本硬编码一个版本号。如果整数低于硬编码版本,提示更新:

NSInteger currentVersion = 3; // increment with each new version

if ([[NSUSerDefaults standardUserDefaults] integerForKey:@"HasLaunchedForVersion"] < currentVersion) {

    [[NSUserDefaults standardUserDefaults] setInteger:currentVersion forKey:@"HasLaunchedForVersion"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    // This is the first launch for this version

} else {
    // App hasn't been updated since last launch
}
于 2013-11-01T17:55:26.143 回答
0

它们不会被删除。并且会有旧的价值观。

如果在旧版本中使用“HasLaunchedOnce”。使用一个新的并将其命名为“HasUpdateLaunchedOnce”。

检查这两个值并决定要做什么。

if (HasLaunchedOnce exists && HasUpdateLaunchedOnce not exists)
  // proceed
于 2013-11-01T17:49:16.577 回答