2010-10-04 3 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.

См. this question или this question для получения дополнительной информации.

1

Это все ваше заявление оператора? Если вы забыли забыть о

default: 
break; 

раздел.

Удостоверьтесь, что ваш вопрос включает полный метод или, по крайней мере, полный, чтобы облегчить нам помощь.

EDIT: Oh! Посмотрев на это во второй раз, если вы объявляете новые переменные в инструкции switch, вы должны сделать это в фигурных скобках. Не знаю, почему именно, я столкнулся с этой проблемой несколько недель назад. Может быть, кто-то может уточнить, почему это необходимо?

+0

Это не полный метод, я думал, что помогаю, не включая материал после, но я вижу, как это может быть первая мысль. Благодарю. – griotspeak

+0

Операторы switch не обязаны иметь случай по умолчанию. – JeremyP

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

Смежные вопросы