我的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)我第一次启动新版本时,是否只想做这些事情。
答案 0 :(得分: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
}
答案 1 :(得分:0)
他们不会被删除。并且会有旧的价值观。
如果在旧版本中使用“HasLaunchedOnce”。使用一个新的并称之为“HasUpdateLaunchedOnce”。
检查两个值并确定您想要做什么。
if (HasLaunchedOnce exists && HasUpdateLaunchedOnce not exists)
// proceed