应用更新的NSUserDefaults行为

Fab*_*mer 2 objective-c ios

我的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
}
Run Code Online (Sandbox Code Playgroud)

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

1)有史以来第一次启动应用程序.2)该应用检测到更新的版本.3)下载相同的应用程序 - >此时苹果"替换"旧版本到新版本.4)打开较新的版本应用程序.5)我第一次启动新版本时,我想做的事情.

小智 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
}
Run Code Online (Sandbox Code Playgroud)