1

简单的问题......我对我的代码有一些评论并删除了它们并得到了一个错误。几个小时后,我到达了源头。

此代码有效:

switch (indexPath.row) {
    case 0:
        NSLog(@"case 0");
        break;
    case 1: // Clients
        NSLog(@"case 1");

        ViewClientListTableController *viewListTableController = [[ViewClientListTableController alloc] init];//]WithNibName:@"BrowseViewController" bundle:nil];
        viewListTableController.managedObjectContext = self.managedObjectContext;
        [self.navigationController pushViewController:viewListTableController animated:YES];
        //[self.navigationController setNavigationBarHidden:NO];
        [viewListTableController release];

        break;
}

下一个(通过删除 NSLog(@"case 1"); )不起作用:

switch (indexPath.row) {
    case 0:
        NSLog(@"case 0");
        break;
    case 1: // Clients


        ViewClientListTableController *viewListTableController = [[ViewClientListTableController alloc] init];//]WithNibName:@"BrowseViewController" bundle:nil];
        viewListTableController.managedObjectContext = self.managedObjectContext;
        [self.navigationController pushViewController:viewListTableController animated:YES];
        //[self.navigationController setNavigationBarHidden:NO];
        [viewListTableController release];

        break;
}

如您所见,只有 NSLog 行不见了。编译器给了我2个错误:

RootViewController.m:212:错误:“ViewClientListTableController”之前的预期表达式

RootViewController.m:213: error: 'viewListTableController' undeclared (首先在这个函数中使用)

当然,一个答案是离开 NSLog 行,但真的……为什么会发生这个错误?

4

3 回答 3

3

switch 语句通常在其 case 标签中声明变量时遇到问题。我打赌

{
        ViewClientListTableController *viewListTableController = [[ViewClientListTableController alloc] init];//]WithNibName:@"BrowseViewController" bundle:nil];
        viewListTableController.managedObjectContext = self.managedObjectContext;
        [self.navigationController pushViewController:viewListTableController animated:YES];
        //[self.navigationController setNavigationBarHidden:NO];
        [viewListTableController release];
}

适用于情况 1: - NSLog 宏可能具有具有类似效果的扩展。

于 2010-09-30T06:14:11.473 回答
1

我一直有这个烦恼。我想我们不能在 case 标签内的第一行声明一个新变量,除非我们有一个括号{}

case 1: // Clients
{

        ViewClientListTableController *viewListTableController = [[ViewClientListTableController alloc] init];//]WithNibName:@"BrowseViewController" bundle:nil];
        viewListTableController.managedObjectContext = self.managedObjectContext;
        [self.navigationController pushViewController:viewListTableController animated:YES];
        //[self.navigationController setNavigationBarHidden:NO];
        [viewListTableController release];

        break;
}
于 2010-09-30T06:22:52.843 回答
0

在使用 switch-case 语句时,我也遇到了这个问题。如果在“ViewClientListTableController *viewListTableController = [[ViewClientListTableController alloc] init];”之前写一个分号 像“;ViewClientListTableController *viewListTableController = [[ViewClientListTableController alloc] init];”这样的句子,你可能会看到没有错误了。我不知道确切的原因,但它纠正了问题。

于 2010-09-30T06:22:17.883 回答