2011-11-07 15 views
2

次のステートメントで何が問題になっていますか?論理エラー "未定義またはガベージ値が呼び出し元に返されました"

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
    NSString *title; 

    switch (section) 
    { 
     case 0: 
      title = @"Section 1"; 
      break; 
     case 1: 
      title = @"Section 2"; 
      break; 
     default: 
      break; 
    } 

    return title; 
} 

このコードを分析すると、論理エラー "呼び出し元に未定義またはガベージ値が返される"が表示されるのはなぜですか?

答えて

11

NSString *タイトルをnilに設定した場合:NSString * title = nil; (セクションが0でも1でもない場合)switch(セクション)はデフォルトを通過し、タイトルを返します。ポインタは何も指していないか、または初期化されていません。 タイトル文字列をnilに代入します。あなたがそれを宣言した場所。

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
    NSString *title = nil; 

    switch (section) 
    { 
     case 0: 
      title = @"Section 1"; 
      break; 
     case 1: 
      title = @"Section 2"; 
      break; 
     default: 
      break; 
    } 

    return title; 
} 
+1

これは、intを設定して返すときのheightForRowAtIndexPathにも適用されます。だから "int cellHeight;" "int cellHeight = 0;"にする必要があります。このNSStringで起きていることに似ています。 – whyoz

2

section12でない場合、titleは初期化されていませんので。最初の行またはdefaultの場合はswitchステートメントのいずれかで初期化することができます。

関連する問題