Domanda

Come posso rilevare quando un'app iOS viene avviata per la prima volta?

È stato utile?

Soluzione

Praticamente quello che hanno detto Marc e Chris, anche se preferisco cambiare il valore quando l'app si chiude nel caso in cui ci siano più aree dell'applicazione che devono conoscerlo. Nel codice:

// -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"];

Altri suggerimenti

Mi rendo conto che questa domanda è piuttosto vecchia, ma l'ho usata per trovare il metodo one per rilevare il primo avvio dopo una "nuova installazione" (rispetto al primo avvio dopo un upgrade / downgrade) e ho pensato di condividere il codice qui per i futuri spettatori nel caso fosse utile.

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

Normalmente utilizzo il numero di versione dell'app anziché un valore booleano per il valore firstLaunch nelle impostazioni predefinite dell'utente. In questo modo, è possibile distinguere tra il primo avvio di una nuova installazione e il primo avvio di un aggiornamento. Potrebbe essere utile nelle versioni future ...

Questa è una scorciatoia davvero semplice ma ho scoperto che le coppie di valori chiave NSUserDefault sono sempre NULL la prima volta che esegui un'app, quindi

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

e posiziona questo codice in awakeFromNib del controller di visualizzazione che viene visualizzato all'avvio dell'applicazione. Non so se una qualsiasi delle altre risposte funzioni per il tuo problema, ma questo è il modo in cui l'ho risolto.

È possibile impostare un valore booleano nelle impostazioni predefinite dell'utente per farlo. Impostare la chiave su false quando si chiama registerDefaults: , quindi impostarla su true, cambiarla in true dopo aver mostrato la schermata di aiuto iniziale o qualunque cosa si debba fare.

Se hai un file di dati persistente che viene sempre salvato dopo la chiusura dell'app, verificare se esiste sarebbe un altro modo.

Salva come preferenza utente , ad esempio had_first_launch, impostato su true all'avvio, sarà falso solo la prima volta ...

Questo non funzionerà correttamente se si desidera rilevare in altri punti del codice se è il primo avvio. "ApplicationWillTerminate" non funzionerà da iOS 4.0 a causa del multitasking. questo link fornisce una buona soluzione: http://mobiledevblog.metalcompass.com/?p=43

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top