NSUserDefaults行为与应用程序更新

我有一个方法在我的iOS应用程序,当我的服务器有一个更大的版本(我的应用程序(一个新的IPA版本)检测到时更新应用程序。 如果用户想要下载,应用程序会在iPad上自行更新。

事情是,当我第一次打开新版本时,我想从数据库更新一些实体属性,但我不知道如何去做。 我无法debugging,因为当我下载最新的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)下载相同的应用程序 – >在这一点上,苹果将旧版本replace为新版本。 4)打开较新的版本的应用程序。 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 } 

他们不会被删除。 而且会有旧的价值。

如果在旧版本中使用“HasLaunchedOnce”。 使用一个新的并称之为“HasUpdateLaunchedOnce”。

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

 if (HasLaunchedOnce exists && HasUpdateLaunchedOnce not exists) // proceed