6

应用程序启动后,我正在使用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];

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

4

5 回答 5

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分支将永远不会再次执行(假设用户没有删除应用程序)。

于 2010-04-05T14:29:09.080 回答
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];
}
于 2010-04-05T14:28:40.837 回答
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"];    
}
于 2010-04-05T14:27:43.477 回答
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];
    }
}
于 2013-02-20T14:42:36.833 回答
1

由于上述解决方案在大多数情况下都应该有效,所以我想在这个时间点让您了解以下内容。

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

并在此讨论

于 2011-08-17T10:08:32.897 回答