2010-10-04 40 views
1
- (void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

if ([indexPath section] == 0) { 
    switch ([indexPath row]) { 

    case 0: 
    [self renameExercise]; 
    [[self tableView] deselectRowAtIndexPath:indexPath 
      animated:YES]; 
    break; 

    case 1: 
    EditRootNoteViewController *newController = [[EditRootNoteViewController alloc] initWithNibName:@"EditNoteView" 
          bundle:nil]; 
    [newController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal]; 
    [newController setDelegate:self]; 
    [self presentModalViewController:newController 
      animated:YES]; 
    [newController release]; 
    break; 

xCode'期待EditRootNoteViewController之前的表达式......但为什么来?这段代码在这个开关之外工作......这可能是某种线索,但我一点也没有。为什么这段代码无法工作?

回答

2

这是因为你不能在switch语句中声明一个变量作为case的第一条语句。

请参阅this questionthis question了解更多信息。

1

这是您的整个switch语句吗?如果是这样,你忘记了

default: 
break; 

部分。

确保您的问题包含完整的方法,或至少一个完整的方法,使我们更容易帮助。编辑: 哦!在第二次查看之后,如果在switch语句中声明新变量,则必须在大括号内进行。不知道为什么,几周前我遇到了这个问题。也许有人可以详细说明为什么这是必要的?

+0

这不是一个完整的方法,我认为我在帮助之后不包括这些东西,但是我可以看到这可能是第一个想法。谢谢。 – griotspeak 2010-10-04 00:59:37

+0

交换语句不需要有默认情况。 – JeremyP 2010-10-04 09:23:26

2

尝试把代码块:

... 
    switch ([indexPath row]) { 

    case 0: 
    [self renameExercise]; 
    [[self tableView] deselectRowAtIndexPath:indexPath 
      animated:YES]; 
    break; 

    case 1: { 
    EditRootNoteViewController *newController = [[EditRootNoteViewController alloc] initWithNibName:@"EditNoteView" bundle:nil]; 
    [newController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal]; 
    [newController setDelegate:self]; 
    [self presentModalViewController:newController animated:YES]; 
    [newController release]; 
    } break; 
    } 

或者更好的是,提取的代码放到一个单独的方法。

+0

dag。只有一个答案可以是正确的?好吧...我投了这个......但其他答案很彻底,为什么......但这也是一个很好的答案。 (我知道这不是那么严肃,但这是我所能做的,谢谢你) – griotspeak 2010-10-04 01:04:50

相关问题