在第一次启动应用程序时显示UIAlertView

时间:2011-11-03 15:20:14

标签: iphone nsuserdefaults

我是否在第一次玩UIAlertView时出错?在我的didFinishLaunchingWithOptions中,我的MainViewController被实例化。所以在MainViewController的viewDidLoad中,我这样做:

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

当我在设备上试用它时,如果我双击回家,并且点击应用旁边的减号将其从背景模式中移除(我认为双击是正确的吗?),它不起作用。因为我这样做后,再次出现弹出窗口。如果我不这样做,警报只显示一次。这是预期的行为吗?非常感谢。

2 个答案:

答案 0 :(得分:0)

尝试使用整数(0/1)。 BOOL也遇到了一些问题。

setInteger:forKey:
integerForKey:

修改 尝试在启动/显示警报之前更新默认值 请更新您的变量名称。你的代码是当前名称的废话。

试试这个:

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

答案 1 :(得分:0)

您是否第一次从userdefaults获得了您的shouldAlert? 我认为你应该检查用户默认是否存在,否则你的bool是NO或FALSE 检查这个例子:

NSUserDefaults *userDef = [NSUserDefaults standardUserDefaults];
shouldAlert = YES; // define in the .h
if(userDef)
shouldAlert = [userDef boolForKey:@"ShowAlert"];