2012-10-12 63 views

回答

43
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 

    if (![userDefaults valueForKey:@"version"]) 
    { 
      // CALL your Function; 

      // Adding version number to NSUserDefaults for first version: 
      [userDefaults setFloat:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] forKey:@"version"];  
    } 


    if ([[NSUserDefaults standardUserDefaults] floatForKey:@"version"] == [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue]) 
    { 
    /// Same Version so dont run the function 
    } 
    else 
    { 
     // Call Your Function; 

     // Update version number to NSUserDefaults for other versions: 
     [userDefaults setFloat:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] forKey:@"version"]; 
    } 
+0

谢谢Bhupendra – Eldhose

+0

欢迎:) – Bhupendra

+0

破解的东西@Bhupendra,我试图写一个plist设置文件到用户文档商店,你的方式好多了 – MagicalArmchair

2

您可以在NSUserDefaults中创建BOOL值键(例如isFirstLaunch = NO),并在执行该功能后将其设置为YES。

如果您想在用户每次启动应用程序时执行此操作,则需要在应用程序存在之前将其设置为默认值(即将其重置为AppDelegate中的-applicationWillTerminate:方法)。

3

如果你想运行一些代码时,应用程序或者是第一次安装或每次更新后,那么你可以从你的包

CGFloat currentVersion = [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue]; 

阅读应用程序的当前版本,之后你写的用户默认已经运行了代码。

[[NSUserDefaults standardUserDefaults] setFloat:currentVersion 
             forKey:kLastVersionThatExecutedMyCodeKey]; 

下一次启动应用程序时,将比较用户默认值与捆绑版本的值。如果软件包版本已更改,则应用程序已更新,这意味着您应该再次运行代码并将新版本写入用户默认值。

+0

应该是(缺少引号) - > [[NSUserDefaults的standardUserDefaults]的setFloat:CURRENTVERSION forKey:@ “kLastVersionThatExecutedMyCodeKey”]; – mikemike396

+0

@ Pyraego.com用一个小的'k'前缀一个变量名是一个常用的约定来表明它是一个常量。 Apple的框架在很多地方使用它。 'kLastVersionThatExecutedMyCodeKey'应该是一个变量,而不是一个字符串本身。 –

+0

有趣!很高兴知道。对困惑感到抱歉。 – mikemike396

7

这是Bhupendra's answer雨燕转换:

let infoDictionary: NSDictionary? = NSBundle.mainBundle().infoDictionary // Fetch info.plist as a Dictionary 
let temp: NSString = infoDictionary?.objectForKey("CFBundleVersion") as NSString 
let val: Float = temp.floatValue 

var userDefaults = NSUserDefaults() 
if userDefaults.valueForKey("version") == nil {    
    // Call function 
    // Adding version number to NSUserDefaults for first version 
    userDefaults.setFloat(val, forKey: "version") 
} 

if NSUserDefaults().floatForKey("version") == val { 
    // Same Version so dont run the function 
} else {  
    // Call function 
    // Update version number to NSUserDefaults for other versions 
    userDefaults.setFloat(val, forKey: "version") 
} 
1

这Bhupendra的答案的Swift2.0版本,如果有人需要它!

let infoDictionary: NSDictionary? = NSBundle.mainBundle().infoDictionary 
    //Fetch info.plist as a Dictionary 
    let temp: NSString = infoDictionary?.objectForKey("CFBundleVersion") as! NSString 
    let val: Float = temp.floatValue 

    let userDefaults = NSUserDefaults() 
    if userDefaults.valueForKey("version") == nil { 
     userDefaults.setFloat(val, forKey: "version") 
    } 
    if NSUserDefaults().floatForKey("version") == val { 
     //if it is the same version, don't run the code 
    } 
    else { 
     userDefaults.setFloat(val, forKey: "version") 
    } 
} 
相关问题