2012-02-29 50 views
0

代碼工作正常,但我得到警告「之爭的消息表達式是初始化值」這一段代碼:論點消息表達式是未初始化值

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;

+0

你肯定不會說「未初始化」? – 2012-02-29 01:53:35

+0

可以用'NSString * quality'創建一個指針;'如果你正在使用ARC。否則,用'NSString * quality = nil;'將其設置爲零。 – Rog 2012-02-29 01:58:36

回答

2

您的意思是「未初始化的值」?如果沒有任何一個case語句匹配,那麼quality變量最終會被初始化,一旦到達+stringWithFormat:,該變量可能會崩潰。您可以使用默認值(可能爲nil)初始化quality,也可以在switch中提供default語句來初始化它。

+0

是,未初始化的值。我的錯。 – NCFUSN 2012-02-29 02:05:50

1

不是:

NSString *quality; 

使用:

NSString *quality = nil; 

即使所有值都肯定在switch入賬,並quality肯定會被分配,那可能不會在未來真正的由於代碼庫中的變化(其他地方)。最佳做法是分配一個默認值,因此是警告。

添加default:情況下,你的switch語句,並指定一個默認值quality也將修復警告:

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