2011-04-22 70 views
0
switch (indexPath.section) { 
    case 0: //products used 
    NSString * chemical = [selectedChemicals objectAtIndex:indexPath.row]; 
    cell.textLabel.text = chemical; 
    break; 
    case 1: //areas sprayed 
    return [selectedAreas count]; 
    break; 
    case 2://target pests 
    return [selectedPests count]; 
    break; 
    case 3://notes 
    return 1; 
    break; 
} 

给我:    “/Users/grady/programming/ObjectivelyBetter/bioguard/Classes/JobWizardViewController.m:147:错误: '化学' 未声明(第一次在这个函数中使用)”奇怪开关解析错误

在案例开始部分添加一个空白分号可以修复它。

switch (indexPath.section) { 
    case 0: //products used 
    ; 
    NSString * chemical = [selectedChemicals objectAtIndex:indexPath.row]; 
    cell.textLabel.text = chemical; 
    break; 
    case 1: //areas sprayed 
    return [selectedAreas count]; 
    break; 
    case 2://target pests 
    return [selectedPests count]; 
    break; 
    case 3://notes 
    return 1; 
    break; 
} 
+0

你并不需要手动把所有的'' 格式化你的代码;只需选择它并单击看起来像“{}”的按钮即可。 – 2011-04-22 19:50:32

+0

谢谢你,这是非常讨厌。 – 2011-04-22 19:52:43

+0

请再次发布您的代码并点击“{}”按钮。这也会导致颜色突出代码。 – vikingosegundo 2011-04-22 19:55:38

回答

2

在声明case语句中的变量,这是一个很好的做法(并避免此类错误需要)以封闭大括号,例如中的语句

case 0: 
    { 
     int i = 0; 
     .... 
     break; 
    } 

不确定为什么一个分号会“解决”这个问题。这有点奇怪......花括号是你需要的。

在您的特定情况下,你也可以只消除局部变量声明,并设置电池为textLabel像这样:

cell.textLabel.text = [selectedChemicals objectAtIndex:indexPath.row]; 
+0

你是对的,至于怪异......我想我已经想通了有点,它与交换机扩展有关。 分号是第一种情况下的整个表达式,然后它只落在第二个表达式......第三个表达式中,直到达到中断为止。 看起来像GCC中的错误,不执行一致的约束检查。 – 2011-04-22 20:11:13

+0

几年前,我在Solaris上看到了同样的问题,使用普通的旧C和C++。这不是一个新事物,但更令人惊讶的是,这仍然是一个“问题”。生活和学习我猜。有趣的是,“最佳实践”通常是围绕“最佳”事物的模式。 :-) – 2011-04-22 20:13:50