仅在第一次启动应用程序时显示UIAlertView
问题描述:
我是否在使UIAlertView仅第一次播放时出错?在我的didFinishLaunchingWithOptions中,我的MainViewController被实例化。因此,在MainViewController的viewDidLoad,我这样做:仅在第一次启动应用程序时显示UIAlertView
BOOL shouldAlert = [[NSUserDefaults standardUserDefaults] boolForKey:@"ShowAlert"];
if (!shouldAlert) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"MyAlert" message:@"Some text here" delegate:self cancelButtonTitle:@"Continue" otherButtonTitles: nil];
[alert show];
[alert release];
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ShowAlert"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
当我尝试在设备上,它不会,如果我双击Home工作,并击中减号应用从后台删除它旁边模式(我认为这是双击是正确的?)。因为我这样做后,弹出窗口再次出现。如果我不这样做,那么警报只会显示一次。这是预期的行为?谢谢一堆。
答
尝试使用整数(0/1)。 BOOL也有一些问题。
setInteger:forKey:
integerForKey:
EDIT 尝试INITING /表示警报之前更新所述默认值。
并请更新您的变量名称。你的代码与他们当前的名字是无稽之谈。
试试这个:
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
BOOL hasAlreadyBeenLaunched = [defaults boolForKey:@"HasAlreadyBeenLaunched"];
if (!hasAlreadyBeenLaunched) {
[defaults setBool:YES forKey:@"HasAlreadyBeenLaunched"];
[defaults synchronize];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"MyAlert" message:@"Some text here" delegate:self cancelButtonTitle:@"Continue" otherButtonTitles: nil];
[alert show];
[alert release];
}
答
你从你的userdefauls shouldAlert第一次? 我想你应该检查是否存在userdefaults否则你的布尔是NO或FALSE 检查这个例子:
NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults];
shouldAlert = YES; // define in the .h
if(userDef)
shouldAlert = [userDef boolForKey:@"ShowAlert"];
+0
这是疯狂的罗嗦,应该没关系。这是特别无关的,因为她可以(准确)记录'[[NSUserDefaults standardUserDefaults] boolForKey:@“ShowAlert”]的返回值;'' –
是否行得通?如果是这样,你可能没有做错任何事情。从这里看起来很不错,只是你的'shouldAlert'变量读不好。就个人而言,我会将其改为'hasOpenedPreviously',或者留下名字并将所有布尔值转换。 –
@Patrick Perini不,它不工作,因为当我双击家里,然后从后台模式删除应用程序,警报弹出备份。我应该将其添加到我的帖子中。 – Crystal
这很奇怪,因为终止应用程序不应该混淆'NSUserDefaults'。我会尝试一些关于'NSUserDefaults'的日志语句,以获得更多关于你的布尔值是否坚持的信息。 –