2011-10-13 11 views
5

Tworzę aplikację, w której muszę utworzyć plik plist, gdy aplikacja uruchamia się po raz pierwszy. Później użyję plist do przechowywania szczegółów, które później użytkownik wprowadza. Jak mogę wykryć pierwsze uruchomienie aplikacji? Eksperymentowałem z NSUserDefaults, ale myślę, że robię coś nie tak.Wykrywanie pierwszego uruchomienia aplikacji

Odpowiedz

15

Można to zrobić z NSUserDefaults. Ale uważaj z numerem wersji.

Wykonaj następujące czynności:

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]; 
} 

firstStartCode selektor zostanie wywołana tylko raz dla każdej wersji aplikacji na pierwszym biegu.

OK?

+0

+1 Tak zawsze to robię. –

2

Chciałbym użyć NSUserDefaults do przechowywania wskazania pierwszego uruchomienia.

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

[[NSUserDefaults standardUserDefaults] synchronize]; 

Następnie można przetestować za to później ...

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

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

+0

więc pierwszy blok kodu, mogę umieścić go w aplikacji delegata pod didFinishLaunching? – theNoobProgrammer

+0

Tak, to powinno działać. – CamelSlack

2

można użyć następujących:

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

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