Xcode上奇怪的编译错误

时间:2010-09-30 06:11:23

标签: iphone xcode compiler-errors nslog

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

此代码有效:

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:错误:'viewListTableController'未声明(首次在此函数中使用)

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

3 个答案:

答案 0 :(得分: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宏可能具有类似效果的扩展。

答案 1 :(得分:1)

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

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;
}

答案 2 :(得分:0)

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