在第一次启动iPhone应用程序时,如何让UIAlertView只出现一次?

时间:2010-04-05 14:16:49

标签: iphone cocoa-touch xcode uialertview

我正在使用UIAlertView在应用启动后弹出窗口。它工作正常,但我只希望弹出窗口出现在应用程序的第一次启动时。目前,UIAlertViewAppDelegate中的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]; 方法。这是我的代码:

{{1}}

我是应用程序开发的新手,很抱歉,如果这很简单。

5 个答案:

答案 0 :(得分:10)

要确定应用程序是否第一次运行,您需要有一个持久变量来存储此信息。 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分支将永远不会再次执行(假设用户不删除应用程序)。

答案 1 :(得分:4)

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

答案 2 :(得分:3)

使用最初设置为0的NSUserDefault,并在首次显示警报后将其设置为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"];    
}

答案 3 :(得分:2)

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

答案 4 :(得分:1)

如上所述,解决方案在大多数情况下都有效,我想在此时让您了解以下内容。

Apple文档说:NSUserDefaults类目前不支持每个主机的首选项。为此,您必须使用CFPreferences API。参考NSUserDefaults

关于这个问题的讨论here