首页 文章

如何检查应用程序的当前版本之前是否已启动?

提问于
浏览
0

我想在我的iOS应用程序首次启动时显示用户协议/免责声明 . 目前,我只是在AppDelegate中的didFinishLaunchingWithOptions中使用以下代码执行此操作:

//Show disclaimer to user, if he never agreed to it yet
 if(![[NSUserDefaults standardUserDefaults] boolForKey:kHasAgreedToDisclaimerKey])
      [self showDisclaimer];

但是,每次安装新版本的应用程序并首次启动时,我都需要显示新的免责声明 .

我想解决这个问题的一种方法是为每个应用程序版本创建一个不同的UserDefaults键,但看起来它会在用户的设备上留下很多垃圾密钥 .

有没有更好的方法来解决这个问题?

3 回答

  • 4

    关 . 不要为每个应用版本保存一些内容,只需存储上次打开的应用版本并将其与当前应用版本进行比较 . 像这样的东西:

    //Get the last opened and current versions
    NSString *lastOpenedV = [[NSUserDefaults standardUserDefaults] objectForKey:@"LastOpenedVersion"];
    NSString *currentVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
    
    //Show an alert if necessary
    if (lastOpenedV == nil || ![lastOpenedV isEqualToString:currentVersion]) {
    
        [self showDisclaimer];
    
        //Update the last opened version
        [[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:@"LastOpenedVersion"];
    }
    
  • 1

    听起来你有正确的想法 .

    我会尝试这样的事情:

    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
        NSString *storedVersion = [prefs objectForKey:@"AppVersion"];
    
        NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
        NSString *bundleVersion = [infoDict objectForKey:@"CFBundleVersion"];
    
        if (storedVersion) {
            if (![storedVersion isEqualToString:bundleVersion]) {
                [prefs setObject:bundleVersion forKey:@"AppVersion"];
                [prefs synchronize];
    
                // Show disclaimer
            }
        } else {
            [prefs setObject:bundleVersion forKey:@"AppVersion"];
            [prefs synchronize]; 
       }
    

    基本上,您要将捆绑包版本复制到userDefaults,并在每次启动时进行比较 . 如果默认情况下不存在,那么您知道该应用程序刚刚安装,并且您希望显示免责声明 . 如果它是默认值,那么您要根据捆绑包版本进行检查 . 只要捆绑版本不匹配,您就知道该应用已更新 .

    编辑:看起来花了太长时间来模拟我的例子 . 我来晚了十分钟,你找到了答案 . 但是我会把它留在这里:)

  • 0

    应用程序删除后,NSUserdefaults将被删除,但数据将在更新时保留 . 如果您没问题,可以在那里保存可接受版本的版本号,如评论中@Nick所述 .
    为了使您的信息真正持久,请在用户接受时将密钥链写入密钥链 .

相关问题