iOS4 - использование оператора switch для обработки нажатий кнопок - PullRequest
1 голос
/ 15 ноября 2011

Я убираю свое первое приложение, пытаюсь объединить события нажатия моей кнопки в один вызов метода и использую тег кнопки, чтобы увидеть, какая из них была нажата.Тем не менее, оператор switch не похоже на то, что я пытаюсь выделить контроллер представления внутри него

#import "NewsViewController.h"
...
...
- (IBAction)contentPressed:(id)sender
  {
       //  check which button was pressed

       UIButton *contentBtn = (UIButton *)sender;

       switch (contentBtn.tag) 
       {  
           case 1:
               NewsViewController *controller = [[NewsViewController alloc] initWithNibName:@"NewsViewController" bundle:nil];

               [self.navigationController pushViewController:controller animated:YES];
               [controller release];
           break;
        }
   }

Он отказывается признать контроллер - я получаю «Использование необъявленного идентификатора« controller »» и «неожиданно».имя интерфейса NewsViewController, ожидаемый идентификатор "в строке, где я делаю alloc.

Все работало до того, как я попытался объединить отдельные IBA-операции для кнопок в одну.Кто-нибудь пролил свет на это?

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Чтобы объявить переменные внутри оператора switch switch, эта часть кода должна иметь собственную область видимости, заключенную в фигурные скобки.

switch (contentBtn.tag) 
{  
    case 1:
    {
        NewsViewController *controller = [[NewsViewController alloc] initWithNibName:@"NewsViewController" bundle:nil];

        [self.navigationController pushViewController:controller animated:YES];
        [controller release];
    }
    break;
}
1 голос
/ 15 ноября 2011

Вы не можете объявлять переменные непосредственно внутри оператора case.Вы должны либо объявить переменную NewsViewController *controller перед оператором switch, либо заключить весь регистр в фигурные скобки.Это связано с тем фактом, что операторы case имеют механизм, называемый сквозным, когда один случай, который не заканчивается в break;, будет продолжаться до следующего случая, что создает трудности с объявлениями переменных.Если вы делаете это так, у вас все будет хорошо:

   switch (contentBtn.tag) 
   {  
       case 1:
       {
           NewsViewController *controller = [[NewsViewController alloc] initWithNibName:@"NewsViewController" bundle:nil];

           [self.navigationController pushViewController:controller animated:YES];
           [controller release];
           break;
       }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...