我正在整理我的第一个应用程序,尝试将按钮按下事件组合到一个方法调用中,并使用按钮的标记来查看已单击的按钮。但是,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;
}
}
它拒绝承认控制器 - 我在我正在进行分配的行上获得“使用未声明的标识符'控制器'”和“意外的接口名称NewsViewController,标识符”。
在我尝试将按钮的单独IBActions组合成一个之前,一切正常。有人对此有所了解吗?
答案 0 :(得分:1)
您不能直接在case语句中声明变量。您必须在switch语句之前声明变量NewsViewController *controller
,或者用花括号括起您的完整案例。这源于这样一个事实,即case语句有一个名为fall-through的机制,其中一个不以break;
结尾的案例将继续到下一个案例,这会给变量声明带来困难。如果你这样做你应该没事:
switch (contentBtn.tag)
{
case 1:
{
NewsViewController *controller = [[NewsViewController alloc] initWithNibName:@"NewsViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:YES];
[controller release];
break;
}
}
答案 1 :(得分:1)
为了在switch switch语句中声明变量,代码段必须通过用大括号括起来拥有它自己的作用域。
switch (contentBtn.tag)
{
case 1:
{
NewsViewController *controller = [[NewsViewController alloc] initWithNibName:@"NewsViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:YES];
[controller release];
}
break;
}