2012-10-12 61 views

Respuesta

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

gracias Bhupendra – Eldhose

+0

eres bienvenido :) – Bhupendra

+0

Cracking cosas @Bhupendra, estaba tratando de escribir un archivo de configuración plist en la tienda de documentos de los usuarios, tu manera es mucho mejor – MagicalArmchair

2

Puede crear una clave de valor BOOL (por ejemplo, isFirstLaunch = NO) en su NSUserDefaults y ajústelo en SÍ después de haber ejecutado la función.

Si desea ejecutarlo cada vez que el usuario inicie la aplicación, deberá establecer la clave a su valor predeterminado antes de que la aplicación exista (es decir, reiníciela en el método -applicationWillTerminate: en AppDelegate).

3

Si desea ejecutar código cuando la aplicación está bien instala por primera vez o después de cada actualización, entonces podía leer la versión actual de la aplicación de su paquete

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

y escribir que los valores predeterminados de usuario después de ha ejecutado el código.

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

La próxima vez que inicie su aplicación, compare el valor de los valores predeterminados del usuario con la versión del paquete. Si la versión del paquete ha cambiado, la aplicación se actualizó, lo que significa que debe volver a ejecutar el código y escribir la nueva versión en los valores predeterminados del usuario.

+0

Debe ser (Missing las comillas) -> [[NSUserDefaults standardUserDefaults] setFloat: currentVersion forKey: @ "kLastVersionThatExecutedMyCodeKey"]; – mikemike396

+0

@ Pyraego.com Prefijo de una variable con una 'k' pequeña es una convención común para indicar que es una constante. Los marcos de Apple lo usan en muchos lugares. 'kLastVersionThatExecutedMyCodeKey' se supone que es una variable, no una cadena en sí misma. –

+0

¡Interesante! Bueno saber. Perdón por la confusion. – mikemike396

7

Esta es la conversión de Swift 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

Ésta es la versión Swift2.0 de respuesta de Bhupendra, si alguien lo necesita!

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") 
    } 
} 
Cuestiones relacionadas