65 votes

iPhone: Comment détecter le lancement d'une application pour la première fois?

Comment détecter le lancement d'une application iPhone?

84voto

Noah Witherspoon Points 35239

Presque tout ce que Marc et Chris ont dit, bien que je préfère changer la valeur lorsque l'application se ferme au cas où il y aurait plusieurs zones de l'application à connaître. Dans du code:

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

59voto

Clint Harris Points 7163

Je me rends compte que cette question est assez ancienne, mais je l’ai utilisée pour trouver une méthode de détection du premier démarrage après une «nouvelle installation» (par rapport au premier démarrage après une mise à niveau / une mise à niveau) et je pensais partager le code ici futurs téléspectateurs au cas où cela serait 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];
 

4voto

NSCoder Points 114

C’est un raccourci très simple, mais j’ai constaté que les paires valeur / clé NSUserDefault sont toujours NULL la première fois que vous exécutez une application,

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

et placez ce code dans le awakeFromNib du contrôleur de vue qui apparaît lors du lancement de votre application. Je ne sais pas si l'une des autres réponses fonctionne pour votre problème, mais c'est la façon dont je l'ai résolu.

2voto

Marc Charbonneau Points 30464

Pour ce faire, vous pouvez définir une valeur booléenne dans les paramètres utilisateur par défaut. Définissez la clé sur false lorsque vous appelez registerDefaults: , puis définissez-la sur true, définissez-la sur true après avoir affiché votre écran d'aide initial ou effectué une autre tâche.

Si vous avez un fichier de données persistant qui est toujours enregistré après la fermeture de l'application, il peut être utile de vérifier s'il existe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X