Wykryć, kiedy aplikacja na iOS jest uruchamiana po raz pierwszy? [zamknięte]

Jak wykryć, gdy aplikacja na iOS zostanie uruchomiona po raz pierwszy?

Author: Vadim Kotov, 2008-11-21

7 answers

Prawie to, co powiedział Marc i Chris, choć wolę zmienić wartość, gdy aplikacja kończy się w przypadku, gdy istnieje 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"];
 81
Author: Noah Witherspoon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-21 13:59:46

Zdaję sobie sprawę, że to pytanie jest dość stare, ale użyłem go, aby wymyślićjedną metodę wykrywania pierwszego uruchomienia po "świeżej instalacji" (vs.pierwszy start po aktualizacji/downgrade) i pomyślałem, że udostępnię kod tutaj dla przyszłych widzów w przypadku, 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];
 59
Author: Clint Harris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-21 14:32:24

Zwykle używam numeru wersji aplikacji zamiast boolean dla wartości firstLaunch w domyślnych ustawieniach użytkownika. W ten sposób można odróżnić pierwsze uruchomienie nowej instalacji Od pierwszego uruchomienia aktualizacji. Może być przydatny w przyszłych wersjach...

 29
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-22 11:12:59

Jest to naprawdę prosty skrót, ale odkryłem, że pary wartości klucza nsuserdefault są zawsze NULL przy pierwszym uruchomieniu 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 przebudzeniu kontrolera widoku, który pojawia się po uruchomieniu aplikacji. Nie wiem, czy któraś z pozostałych odpowiedzi odpowiada na twój problem, ale tak go rozwiązałem.

 4
Author: NSCoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-05 08:08:44

Możesz ustawić wartość logiczną w domyślnej wartości użytkownika, aby to zrobić. Ustaw klawisz na false po wywołaniu registerDefaults:, a następnie ustaw go na true zmień go na true po wyświetleniu początkowego ekranu pomocy lub cokolwiek innego, co musisz zrobić.

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

 2
Author: Marc Charbonneau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-21 13:55:37

Zapisz go jako preferencje użytkownika , NP had_first_launch, ustawiony na true przy starcie, będzie tylko false na pierwszy raz...

 2
Author: Chris Kimpton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-21 13:56:03

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

 2
Author: MCO,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-04 15:27:01