为什么UIAlertView有区别?

3
我有以下代码,可以正常运行:
// Load new game screen
-(IBAction)newGame_button:(id)sender {
    myAlert = [[UIAlertView alloc]
                    initWithTitle:@"Varning" 
                    message:@"Om du går vidare kommer pågående spel stoppas och nollställas!"
                    delegate:self
                    cancelButtonTitle:@"Tillbaka"
                    otherButtonTitles:@"Fortsätt", nil];
    myAlert.tag=kTagNewGame;
    [myAlert show];
    [myAlert release];
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    switch(myAlert.tag ) {
        case kTagContinueGame:
            NSLog(@"kTagContinueGame");
            NSMutableArray *continueGameArray = [[NSMutableArray alloc] initWithCapacity:0];

            AccessCurrentGameData *getCurrentGameInfo = [AccessCurrentGameData new];
            continueGameArray = [getCurrentGameInfo continueTheCurrentGame];
            [getCurrentGameInfo release];
            [continueGameArray retain];
            [continueGameArray release];

            QandA_ViewController * temp = [[QandA_ViewController alloc] init];
            [self setQanda_ViewController:temp];
            [temp release];
            [[self navigationController] pushViewController:qanda_ViewController animated:YES];
            break;
        case kTagNewGame:
            NSLog(@"kTagNewGame");
            AccessCurrentGameData *zeroCurrentGameFileFunction = [AccessCurrentGameData new];
            [zeroCurrentGameFileFunction firstCreationOrRestoreOfGameDataFile];
            [zeroCurrentGameFileFunction release];

            NewGameViewController * temp2 = [[NewGameViewController alloc] init];
            [self setNewGameViewController:temp2];
            [temp2 release];
            [[self navigationController] pushViewController:newGameViewController animated:YES];
            break;
        default:
            break;
    }
}

然而,当我删除NSLog时,出现以下错误:

在NSMutableArray之前需要表达式

我不明白为什么会发生这种情况。我可能可以保留NSLog,但是为什么呢?
1个回答

5
问题在于变量声明不能直接跟在 switch 的 case 标签后面。为了解决这个问题,我通常会将整个 case 块放在 {} 中:
...
case kTagNewGame:
{
        AccessCurrentGameData *zeroCurrentGameFileFunction = [AccessCurrentGameData new];
        [zeroCurrentGameFileFunction firstCreationOrRestoreOfGameDataFile];
        [zeroCurrentGameFileFunction release];

        NewGameViewController * temp2 = [[NewGameViewController alloc] init];
        [self setNewGameViewController:temp2];
        [temp2 release];
        [[self navigationController] pushViewController:newGameViewController animated:YES];
        break;
}
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接