【问题标题】:Argument in message expression is an uninitialized value消息表达式中的参数是未初始化的值
【发布时间】:2012-02-29 01:50:07
【问题描述】:

代码工作正常,但我收到警告“消息表达式中的参数是一个初始化值” 这段代码:

    NSString *quality;
    switch(theItem.quality) {
        case 1:
            quality = @"UNDEF, Set it up!";
            break;
        case 2:
            quality = @"G, (Good)";
            break;
        case 3:
            quality = @"VG, (Very Good)";
            break;
        case 4:
            quality = @"F, (Fine)";
            break;
        case 5:
            quality = @"VF, (Very Fine)";
            break;
        case 6:
            quality = @"XF, (Extra Fine)";
            break;
        case 7:
            quality = @"UNC, (Uncirculated)";
            break;
        case 8:
            quality = @"PROOF, (Proof)";
            break;
    }

    str = [NSString stringWithFormat:@"%@", quality];

这是一个问题还是什么都没有,我可以忽略它? 另外,这样初始化NSString可以吗->NSString *quality;

【问题讨论】:

  • 你确定它没有说“未初始化”吗?
  • 如果您使用 ARC,可以使用 NSString *quality; 创建指针。否则,使用NSString *quality = nil; 将其设置为零。

标签: ios cocoa-touch switch-statement


【解决方案1】:

您的意思是“未初始化的值”吗?如果您的 case 语句都不匹配,quality 变量将最终未初始化,一旦到达+stringWithFormat:,它可能会崩溃。您可以使用默认值(可能是 nil)初始化 quality,也可以在初始化它的 switch 中提供 default 语句。

【讨论】:

    【解决方案2】:

    而不是:

    NSString *quality;  
    

    使用:

    NSString *quality = nil;
    

    即使在switch 中肯定会考虑所有值,并且肯定会分配quality,但由于代码库(其他地方)的更改,将来可能不会如此。最好分配一个默认值,因此会出现警告。

    在 switch 语句中添加 default: 大小写并分配默认的 quality 值也将修复警告:

    case 8:
        quality = @"PROOF, (Proof)";
        break;
    default:
        quality = @"UNKNOWN QUALITY";
    

    【讨论】:

      猜你喜欢
      • 2011-10-24
      • 2011-12-05
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 2011-11-15
      • 2013-08-22
      相关资源
      最近更新 更多