如何知道用户是否更新了应用程序或安装了新副本?

cgo*_*ain 12 iphone iphone-sdk-3.0 ios4

我将使用新的数据结构向我的应用发送更新,因此如果用户正在更新我的应用,我需要更新他们的当前数据.所以我想知道如何以编程方式告诉用户是否更新了我的应用程序或安装了新副本(如果安装了新副本我不需要更新任何内容)?

mag*_*gma 7

这取决于您使用的数据结构类型.

一般情况下,我建议您不要依赖于检查应用程序版本:使用2.0的用户可能刚刚升级或者可能是新用户.

我宁愿检查是否已有数据结构,并采取相应措施.假设您使用的是Sqlite支持的Core Data存储,您可以检查.sqlite文件是否存在,或者检查存储中是否有对象.

  • 忽略我的回答.我误解了你的问题.这个答案+1. (2认同)

dre*_*ful 7

检查数据结构是一个可靠的解决方案.在我自己的应用程序中,我开始担心没有为多个版本升级的人.我觉得这会导致无数的结构检查.我在下面显示的代码确定并存储版本和以前的版本NSUserDefaults.如果需要,您可以编写那些不同的版本差异方案.

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
BOOL versionUpgraded;
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
NSString *preVersion = [prefs stringForKey:@"appVersion"];

if ([prefs stringForKey:@"appVersion"] != nil) {
    //see if version is the same as prior
    //if not it is an Upgraded
    versionUpgraded = !([preVersion isEqualToString: version]);
} else {
    //nil means new install
            //This needs to be YES for the case that
            //"appVersion" is not set anywhere else.
    versionUpgraded = YES; 
}

if (versionUpgraded) {
    [prefs setObject:version forKey:@"appVersion"];
    [prefs setObject:preVersion forKey:@"prevAppVersion"];

    [prefs synchronize];
}
Run Code Online (Sandbox Code Playgroud)