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