6 votes

Comment faire pour qu'une UIAlertView n'apparaisse qu'une seule fois, au premier démarrage d'une application iPhone ?

J'utilise le UIAlertView pour qu'une pop-up se produise une fois que l'application a démarré. Cela fonctionne bien, mais je veux que la fenêtre pop-up n'apparaisse qu'au premier démarrage de l'application. Pour l'instant, j'ai le UIAlertView dans le AppDelegate classe, en applicationDidFinishLaunching méthode. Voici mon code :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
sleep(4);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Welcome!" message:@"SAMPLE!!!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];

Je suis novice en matière de développement d'applications, alors désolé si c'est simple.

10voto

KennyTM Points 232647

Pour déterminer si l'application est exécutée la première fois, vous devez disposer d'une variable persistante pour stocker cette information. NSUserDefaults est le meilleur moyen de stocker ces valeurs de configuration simples.

Par exemple,

-(BOOL)application:(UIApplication *)application … {
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
    if (! [defaults boolForKey:@"notFirstRun"]) {
      // display alert...
      [defaults setBool:YES forKey:@"notFirstRun"];
    }
    // rest of initialization ...
}

Ici, [defaults boolForKey:@"notFirstRun"] lit une valeur booléenne nommée notFirstRun à partir de la configuration. Ces valeurs sont initialisées à NO. Donc si cette valeur est NO, nous exécutons la commande if et afficher l'alerte.

Une fois que c'est fait, nous utilisons [defaults setBool:YES forKey:@"notFirstRun"] pour changer cette valeur booléenne en OUI, de sorte que l'option if ne sera plus jamais exécutée (en supposant que l'utilisateur ne supprime pas l'application).

4voto

zoul Points 51637
- (void) displayWelcomeScreen
{
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    NSString *alreadyRun = @"already-run";
    if ([prefs boolForKey:alreadyRun])
        return;
    [prefs setBool:YES forKey:alreadyRun];
    UIAlertView *alert = [[UIAlertView alloc]
        initWithTitle:@"…"
        message:@"…"
        delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
    [alert show];
    [alert release];
}

3voto

NeilInglis Points 2381

Utilisez un NSUserDefault qui est initialement défini à 0 et que vous définissez à 1 après avoir affiché l'alerte pour la première fois.

//default value is 0
[settings registerDefaults:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:0] forKey:@"HAVE_SHOWN_REMINDER"]];
    BOOL haveShownReminder = [settings boolForKey:@"HAVE_SHOWN_REMINDER"];  
    if (!haveShownReminder)
{
    //show your alert

    //set it to 1
    [[NSUserDefaults standardUserDefaults]  setObject:[NSNumber numberWithInt:1] forKey:@"HAVE_SHOWN_REMINDER"];    
}

2voto

comonitos Points 1238

3 lignes simples

-(BOOL)application:(UIApplication *)applicationBlahBlah {
    if(![[[NSUserDefaults standardUserDefaults] objectForKey:@"NOT_FIRST_TIME"] boolValue])
    {
        [[[[UIAlertView alloc] initWithTitle:nil message:@"message" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] autorelease] show];
        [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:YES] forKey:@"NOT_FIRST_TIME"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
}

1voto

Saran Points 2996

Comme la solution ci-dessus devrait fonctionner dans la plupart des cas, j'aimerais vous tenir au courant de ce qui se passe ci-dessous pour le moment.

Le document d'Apple dit : La classe NSUserDefaults ne prend actuellement pas en charge les préférences par hôte. Pour ce faire, vous devez utiliser l'API CFPreferences. Réf. NSUserDefaults

Et une discussion sur ce sujet aquí

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