2011-10-13 8 views
5

Sto creando un'app in cui devo creare un plist all'avvio dell'app per la prima volta. In seguito utilizzerò il plist per memorizzare i dettagli di un utente in seguito. Come posso rilevare il primo avvio dell'app? Stavo sperimentando con NSUserDefaults ma penso che stia facendo qualcosa di sbagliato.Rilevamento della prima esecuzione di un'app

risposta

15

Si può fare questo con NSUserDefaults. Ma fai attenzione al numero di versione.

procedere come segue:

NSString *bundleVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; 

NSString *appFirstStartOfVersionKey = [NSString stringWithFormat:@"first_start_%@", bundleVersion]; 

NSNumber *alreadyStartedOnVersion = [[NSUserDefaults standardUserDefaults] objectForKey:appFirstStartOfVersionKey]; 
if(!alreadyStartedOnVersion || [alreadyStartedOnVersion boolValue] == NO) { 
    [self firstStartCode]; 
    [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:YES] forKey:appFirstStartOfVersionKey]; 
} 

il firstStartCode selettore essere chiamato solo in tempo per ogni versione dell'applicazione sul molto prima esecuzione.

Ok?

+0

+1 È così che lo faccio sempre. –

2

Mi piace utilizzare NSUserDefaults per memorizzare un'indicazione della prima esecuzione.

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
if (![defaults objectForKey:@"firstRun"]) 
    [defaults setObject:[NSDate date] forKey:@"firstRun"]; 

[[NSUserDefaults standardUserDefaults] synchronize]; 

È quindi possibile verificare in un secondo momento ...

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];   
if([defaults objectForKey:@"firstRun"])   
{ 
    // do something or not... 
} 

Tratto da: Best way to check if an iPhone app is running for the first time

+0

in modo che il primo blocco di codice, lo metto nel delegato app sotto didFinishLaunching? – theNoobProgrammer

+0

Sì, dovrebbe funzionare. – CamelSlack

2

È possibile utilizzare il seguente:

-(void) firstLaunch { 
    //Code goes here 
} 

-(void) firstLaunchCheck { 
    if(![[NSUserDefaults standardUserDefaults] boolForKey:@"didLaunchFirstTime"]) { 
     [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"didLaunchFirstTime"]; 
     [self firstLaunch]; 
    } 
}