Question

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

Était-ce utile?

La solution

Presque tout ce que Marc et Chris ont dit, bien que je préfère modifier la valeur lorsque l'application se ferme, au cas où plusieurs zones de l'application auraient besoin de le savoir. Dans le 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"];

Autres conseils

Je me rends compte que cette question est assez ancienne, mais je l’ai utilisée pour trouver une une méthode de détection du premier démarrage après une "nouvelle installation". (contre le premier démarrage après une mise à niveau / un déclassement) et je pensais partager le code ici pour les futurs lecteurs 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];

J'utilise normalement le numéro de version de l'application au lieu d'un booléen pour la valeur firstLaunch dans les valeurs par défaut de l'utilisateur. De cette façon, vous pouvez faire la distinction entre le premier lancement d’une nouvelle installation et le premier lancement d’une mise à niveau. Peut être utile dans les futures versions ...

Il s’agit d’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, de sorte que

// 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 la propriété awakeFromNib du contrôleur de vue qui apparaît au 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.

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, attribuez-lui la valeur 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 sauvegardé après la fermeture de l'application, il peut être utile de vérifier s'il existe déjà.

Enregistrez-le en tant que préférences de l'utilisateur , par exemple, had_first_launch, défini sur true au démarrage, il ne sera faux que la première fois ...

Cela ne fonctionnera pas correctement si vous souhaitez détecter à d’autres endroits du code son premier lancement. Le " applicationWillTerminate " ne fonctionnera pas à partir d'iOS 4.0 à cause du multitâche. ce lien fournit une bonne solution: http://mobiledevblog.metalcompass.com/?p=43

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top