2008-11-21 18 views

Odpowiedz

80

Prawie co Marc i Chris powiedział, chociaż ja wolę, aby zmienić wartość po zamknięciu aplikacji na wypadek, gdyby było wiele obszarów aplikacji, które muszą o tym wiedzieć. W kodzie:

// -applicationDidFinishLaunching: 
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],@"firstLaunch",nil]]; 
// to check it: 
[[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]; 
// -applicationWillTerminate: 
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstLaunch"]; 
+1

Czy wpisy w bazie danych ustawień domyślnych powiązane z aplikacją są usuwane po odinstalowaniu aplikacji? – xyzzycoder

+1

@xyzzycoder: yes –

+13

Z dostępnym tłem, '-applicationWillTerminate:' zwykle nie jest wywoływane, gdy użytkownik opuszcza aplikację. Zamiast tego jest wywoływane '-applicationWillResignActive'. Tak więc firstLaunch należy ustawić w obu tych metodach. – memmons

2

Możesz ustawić wartość logiczną w domyślnych ustawieniach użytkownika, aby to zrobić. Ustaw klucz na wartość false, gdy zadzwonisz pod numer registerDefaults:, a następnie ustaw go na true, zmieniając wartość na true po wyświetleniu ekranu początkowej pomocy lub cokolwiek innego, co musisz zrobić.

Jeśli masz stały plik danych, który jest zawsze zapisywany po zamknięciu aplikacji, sprawdzenie, czy istnieje, byłoby inne.

2

zapisać jako user preference np had_first_launch, ustawiony na true przy starcie, to będzie tylko na fałszywe po raz pierwszy ...

29

normalnie używam numer wersji aplikacji zamiast logiczną dla wartości firstLaunch w domyślnych użytkowników. W ten sposób można rozróżnić pierwsze uruchomienie nowej instalacji i pierwsze uruchomienie aktualizacji. Może być przydatna w przyszłych wersjach ...

59

Zdaję sobie sprawę, że to pytanie jest dość stare, ale użyłem go, aby wymyślić jeden sposób wykrywania pierwszego uruchomienia po "świeżej instalacji" (w porównaniu do pierwszego uruchomienia po uaktualnienie/obniżenie wersji) i pomyślałem, że udostępnię kod tutaj przyszłym widzom, na wypadek, gdyby był pomocny.

// Get current version ("Bundle Version") from the default Info.plist file 
NSString *currentVersion = (NSString*)[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; 
NSArray *prevStartupVersions = [[NSUserDefaults standardUserDefaults] arrayForKey:@"prevStartupVersions"]; 
if (prevStartupVersions == nil) 
{ 
    // Starting up for first time with NO pre-existing installs (e.g., fresh 
    // install of some version) 
    [self firstStartAfterFreshInstall]; 
    [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:currentVersion] forKey:@"prevStartupVersions"]; 
} 
else 
{ 
    if (![prevStartupVersions containsObject:currentVersion]) 
    { 
     // Starting up for first time with this version of the app. This 
     // means a different version of the app was alread installed once 
     // and started. 
     [self firstStartAfterUpgradeDowngrade]; 
     NSMutableArray *updatedPrevStartVersions = [NSMutableArray arrayWithArray:prevStartupVersions]; 
     [updatedPrevStartVersions addObject:currentVersion]; 
     [[NSUserDefaults standardUserDefaults] setObject:updatedPrevStartVersions forKey:@"prevStartupVersions"]; 
    } 
} 

// Save changes to disk 
[[NSUserDefaults standardUserDefaults] synchronize]; 
+0

im zawsze używam tego kodu "sprawdź pierwszy start", więc jest to świetny dodatek! dzięki za pracę Clint! – nickthedude

+1

Nigdy nie myślałem o wykryciu ulepszeń i obniżek. +1. – JoePasq

+2

To naprawdę dobry sposób na śledzenie wersji. – Ansari

2

To nie będzie działać poprawnie, jeśli chcesz wykryć w innych miejscach kodu, jeśli jest to pierwsze uruchomienie. "ApplicationWillTerminate" nie będzie działać z iOS 4.0 z powodu wielozadaniowości. ten link zapewnia dobre rozwiązanie: http://mobiledevblog.metalcompass.com/?p=43

4

To jest naprawdę prosty skrót, ale uważam, że pary wartość klucza NSUserDefault zawsze NULL podczas pierwszego uruchomienia aplikacji, więc

// Check to see if its the first time 
if ([[NSUserDefaults standardUserDefaults] valueForKey:@"firstTime"] == NULL) { 
    [[NSUserDefaults standardUserDefaults] setValue:@"Not" forKey:@"firstTime"]; 
} 

i umieść ten kod w awakeFromNib kontrolera widoku, który pojawia się po uruchomieniu aplikacji. Nie wiem, czy jakakolwiek inna odpowiedź działa dla twojego problemu, ale w ten sposób ją rozwiązałem.

Powiązane problemy