【问题标题】:Weird Compilation Error on XcodeXcode 上的奇怪编译错误
【发布时间】:2010-09-30 06:11:22
【问题描述】:

简单的问题...我的代码中有一些 cmets 并删除了它们并出现错误。几个小时后,我到达了源头。

此代码有效:

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 行,但真的……为什么会发生这个错误?

【问题讨论】:

    标签: iphone xcode compiler-errors nslog


    【解决方案1】:

    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 宏可能具有具有类似效果的扩展。

    【讨论】:

      【解决方案2】:

      我一直有这个麻烦。我想我们不能在 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;
      }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2011-10-18
          • 1970-01-01
          • 2019-12-29
          • 1970-01-01
          • 2011-01-22
          • 2016-01-23
          • 2010-10-07
          • 1970-01-01
          相关资源
          最近更新 更多