我正在使用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];
方法。这是我的代码:
{{1}}
我是应用程序开发的新手,很抱歉,如果这很简单。
答案 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