Как сделать так, чтобы UIAlertView появлялся только один раз при первом запуске приложения для iPhone? - PullRequest
6 голосов
/ 05 апреля 2010

Я использую UIAlertView, чтобы всплывающее окно появлялось после запуска приложения.Он работает нормально, но я хочу, чтобы всплывающее окно появлялось только при первом запуске приложения.На данный момент у меня есть UIAlertView в классе AppDelegate, в методе applicationDidFinishLaunching.Вот мой код:

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

Я новичок в разработке приложений, поэтому извините, если это просто.

Ответы [ 5 ]

10 голосов
/ 05 апреля 2010

Чтобы определить, запускается ли приложение в первый раз, вам необходимо иметь постоянную переменную для хранения этой информации. NSUserDefaults - лучший способ сохранить эти простые значения конфигурации.

Например,

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

Здесь [defaults boolForKey:@"notFirstRun"] читает логическое значение с именем notFirstRun из конфигурации. Эти значения инициализируются как NO. Поэтому, если это значение равно NO, мы выполняем ветвь if и отображаем предупреждение.

После того, как это сделано, мы используем [defaults setBool:YES forKey:@"notFirstRun"], чтобы изменить это логическое значение на YES, поэтому ветвь if никогда не будет выполняться снова (предположим, что пользователь не удаляет приложение).

4 голосов
/ 05 апреля 2010
- (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];
}
3 голосов
/ 05 апреля 2010

Используйте NSUserDefault, для которого изначально установлено значение 0 и для которого установлено значение 1 после отображения предупреждения в первый раз.

//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"];    
}
2 голосов
/ 20 февраля 2013

3 простых линии

-(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];
    }
}
1 голос
/ 17 августа 2011

Как и выше решение должно работать в большинстве случаев, я хотел бы держать вас в курсе ниже, а также на данный момент.

Документ Apple гласит: класс NSUserDefaults в настоящее время не поддерживает настройки для каждого хоста. Для этого вы должны использовать API CFPreferences. Ref NSUserDefaults

И обсуждение этого здесь

...