2012-10-12 10 views

risposta

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

grazie Bhupendra – Eldhose

+0

siete i benvenuti :) – Bhupendra

+0

roba di cracking @Bhupendra, stavo cercando di scrivere un file di impostazioni plist per l'archivio dei documenti degli utenti, la tua strada è molto meglio – MagicalArmchair

2

È possibile creare una chiave di valore BOOL (ad esempio isFirstLaunch = NO) nel proprio NSUserDefaults e impostarla su SÌ dopo aver eseguito la funzione.

Se si desidera eseguirlo ogni volta che l'utente avvia l'app, è necessario impostare la chiave sul valore predefinito prima che l'app esista (ad esempio reimpostarla nel metodo -applicationWillTerminate: in AppDelegate).

3

Se si desidera eseguire del codice quando l'applicazione è o prima installato o dopo ogni aggiornamento allora si potrebbe leggere la versione corrente della vostra applicazione dal fascio

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

e scrivere che i valori predefiniti utente dopo aver avere eseguito il codice

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

Al prossimo avvio dell'app, si confronta il valore dei valori predefiniti dell'utente rispetto alla versione del pacchetto. Se la versione del pacchetto è stata modificata, l'app è stata aggiornata, il che significa che è necessario eseguire nuovamente il codice e scrivere la nuova versione sui valori predefiniti dell'utente.

+0

dovrebbe essere (mancante le virgolette) -> [[NSUserDefaults standardUserDefaults] setFloat: currentVersion Forkey: @ "kLastVersionThatExecutedMyCodeKey"]; – mikemike396

+0

@ Pyraego.com La prefissazione di un nome di variabile con un piccolo 'k' è una convenzione comune per indicare che è una costante. I framework Apple lo usano in molti posti. 'kLastVersionThatExecutedMyCodeKey' dovrebbe essere una variabile, non una stringa stessa. –

+0

Interessante! Buono a sapersi. Dispiace per la confusione. – mikemike396

7

Questa è la conversione di 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

Questa è la versione Swift2.0 di risposta di Bhupendra, se qualcuno ne ha bisogno!

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") 
    } 
} 
Problemi correlati