如何首次检查应用程序是否已安装或正在安装

时间:2011-06-02 13:56:47

标签: ios

首次检查该应用程序是否已安装或正在安装的最佳方法是什么。

1 个答案:

答案 0 :(得分:6)

捆绑版本并将其保存为用户默认值。

编辑:

这里有三点需要注意。

  1. 捆绑版本:这是您要发布的应用程序的版本。

  2. 旧版本:这将指示您的应用程序的先前版本。我们将其存储在用户默认值中,以便我们在更新应用程序时知道旧版本的内容。如果你的捆绑版本是1.0,这显然是零。

  3. 目标版本:这表示用户定位的版本。我们稍后会讨论这个问题。

  4. 所以,条件如

    bundleVersion > oldVersion

    if(isVersionBetter:myBundleVersion thanVersion:oldVersion)
    

    要么意味着我们要创建我们的数据库(在这种情况下捆绑版本将是1.0,旧版本将是nil)或更新我们的数据库(在这种情况下捆绑版本将大于1.0,因此旧版本不会是零。

    因此,正如我们所看到的,创建数据库意味着用户第一次安装应用程序。更新数据库意味着用户已经安装了应用程序并正在更新数据库。

    但是,如果您想更新应用程序并希望保持数据库不变,可能还会出现这种情况。也就是说,只有UI更新。

    这里,目标版本出现了。

    如上所述,目标版本是用户定位的版本。如果用户定位捆绑包版本,则所有操作都与上述相同。但是,如果用户的目标是捆绑版本以外的其他版本,我们将跳过数据库更新部分,从而只允许更改UI。

    所以,最后的陈述是这样的:

    if( bundleVersion == targetVersion AND bundleVersion > oldVersion ) {
    // Either create or update the database.
    }else {
    // Do nothing. Skips database updating and allows UI update.
    }
    

    因此,您的数据库函数看起来像这样

    -(void) initWithTargetVersion:(NSString *) targetVersion {
    
        NSString *oldDatabaseVersion = [[NSUserDefaults standardUserDefaults] stringForKey:@"OldDatabaseVersion"];
        NSString *bundleDatabaseVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
    
    
        if([bundleDatabaseVersion isEqualToString:targetVersion] && [self isVersionBetter:oldDatabaseVersion new:targetVersion]) {
            // Create or update the database.
        }else {
            // Do nothing.
        }
    }
    

    用户将按如下方式传递目标版本:

    [[DatabaseManager sharedManager] initWithTargetVersion:@"1.0"];