为什么UIAlertView不起作用?

时间:2011-02-09 21:40:37

标签: iphone objective-c uialertview

我正在测试这段代码但是当我运行它时,它不会触发UIAlertView。当代码命中If (ongoingGame = YES)NSLog时,它会直接跳转到'otherButtonTitles:nil'而不执行UIAlertView。

有人可以向我解释为什么它不会触发它吗?

    -(IBAction)continueGame_button:(id)sender {
    //=====CHECK IF THERE IS AN ON-GOING GAME, IF SO CONTINUE=====//
    AccessCurrentGameData *isThereAnOngoingGameFunction = [AccessCurrentGameData new];
    BOOL ongoingGame = [isThereAnOngoingGameFunction checkIfGameOngoing];
    [isThereAnOngoingGameFunction release];
    NSLog(@"+ + +continueGame_button+ + +");
    NSLog(@"ongoingGame = %@\n", (ongoingGame ? @"YES" : @"NO"));

    if (ongoingGame == YES) {
        NSLog(@"++++++++++++++++++");
        NSLog(@"++++++++++++++++++");
        NSLog(@"++++++++++++++++++");
        NSLog(@"++++++++++++++++++");
        NSLog(@"++++++++++++++++++");

        // 
        UIAlertView *continueGame = [[UIAlertView alloc] initWithTitle:@"Fortsätta spel"
                                                              message:@"Det finns ett aktivt spel, klicka Spela eller Tillbaka"
                                                             delegate:self 
                                                    cancelButtonTitle:@"Tillbaka" 
                                                    otherButtonTitles:nil];

        [continueGame show];
        [continueGame release];


    }

    exit(0);
}

4 个答案:

答案 0 :(得分:2)

您将onGoingGame指定为YES,而不是将其与YES进行比较。使用==而不是=。

答案 1 :(得分:1)

您的提醒代码很好我一直使用该表单(三行 - 初始化,显示,发布)进行提醒。

我建议exit(0)是问题的根源。如果要在用户关闭警报后退出,则应分配一个代理,当用户点击关闭按钮时,该代理将关闭应用程序。使用您的代码,但删除exit(0)。然后按如下方式实现UIAlertViewDelegate:

-(IBAction)continueGame_button:(id)sender {
    //=====CHECK IF THERE IS AN ON-GOING GAME, IF SO CONTINUE=====//
    AccessCurrentGameData *isThereAnOngoingGameFunction = [AccessCurrentGameData new];
    BOOL ongoingGame = [isThereAnOngoingGameFunction checkIfGameOngoing];
    [isThereAnOngoingGameFunction release];
    NSLog(@"+ + +continueGame_button+ + +");
    NSLog(@"ongoingGame = %@\n", (ongoingGame ? @"YES" : @"NO"));

    if (ongoingGame == YES) {
        NSLog(@"+++++++++ ONGOING GAME +++++++++");

        // 
        UIAlertView *continueGame = [[UIAlertView alloc] initWithTitle:@"Fortsätta spel"
                                                              message:@"Det finns ett aktivt spel, klicka Spela eller Tillbaka"
                                                             delegate:self 
                                                    cancelButtonTitle:@"Tillbaka" 
                                                    otherButtonTitles:nil];

        [continueGame show];
        [continueGame release];
    }
}

- (void) alertViewCancel:(UIAlertView *)alertView{
  //If you have other alerts, you may want to check the title of the alert to
  //make sure that you only exit when THIS alert is dismissed  
  exit(0);
}

不要忘记将<UIAlertViewDelegate>代码添加到标题(.h)文件中。

如果您需要多个按钮,也可以使用- (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex,其中一个是特定的“退出”按钮。

请注意,Apple不鼓励在发布到App Store的应用中使用exit(),并且使用该应用可能会导致您的应用被拒绝。

答案 2 :(得分:0)

你不应该立即释放它。即使在警报视图有机会显示之前,您也可以退出应用程序。 :)

即使警报视图可见,您的代码也会继续运行。


Fixage

  1. 删除退出电话
  2. 不要发布alertview。在它的所有者的dealloc方法中释放它。
  3. 使警报视图成为实例变量并向其添加retain属性。
  4. 如果尚未提供,请在其getter中初始化alertview。
  5. 在IBAction中设置它的属性并显示它。
  6. 添加适当的委托方法。
  7. 如果我没有在iPod touch上写这个答案,我会发布一些示例代码。你可以在谷歌找到很多这样的代码。


    此外,如果您的应用不是仅限英语,则应始终使用Foundation提供的本地化。否则,您可以使用默认错误消息和其他UI元素获取英文文本。

答案 3 :(得分:0)

您可以尝试使用此行。

[[[[UIAlertView alloc] initWithTitle:@"this is my message" message:nil delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil] autorelease] show];     

另外,我相信Apple不会在您的应用程序中使用exit()。他们总是希望用户使用“主页”按钮退出应用程序。 exit()调用是一个硬退出,这可能是您没有看到警报的原因。