2012-03-19 18 views
1

ここでは単純なものを紛失していますが、それは私を逃してしまいます。ユーザーが変更可能な配列に新しい人物を入力した後、私はテーブルを更新したい。可変配列はデータソースです。問題はcellForRowAtIndexPathにあると私は信じています。人を追加した後にテーブルビューが正しく更新されない

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    TextFieldCell *customCell = (TextFieldCell *)[tableView dequeueReusableCellWithIdentifier:@"TextCellID"]; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 

    if (indexPath.row == 0) { 
     if (customCell == nil) { 
      NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"TextFieldCell" owner:nil options:nil]; 
      for (id currentObject in nibObjects) { 
       if ([currentObject isKindOfClass:[TextFieldCell class]]) 
        customCell = (TextFieldCell *)currentObject; 
      } 
     } 
     customCell.nameTextField.delegate = self; 
     cell = customCell; 
    } 

    else { 
     if (cell == nil) { 
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 

      cell.textLabel.text = [[self.peopleArray objectAtIndex:indexPath.row-1] name]; 
      NSLog(@"PERSON AT ROW %d = %@", indexPath.row-1, [[self.peopleArray objectAtIndex:indexPath.row-1] name]); 
      NSLog(@"peopleArray's Size = %d", [self.peopleArray count]); 
     } 
    } 

    return cell; 
} 

初めてビューを読み込むとすべてが素晴らしいです。私はこれを取得、その配列に誰かを追加した後

PERSON AT ROW 0 = Melissa 
peopleArray's Size = 2 
PERSON AT ROW 1 = Dave 
peopleArray's Size = 2 

PERSON AT ROW 1 = Dave 
peopleArray's Size = 3 
PERSON AT ROW 2 = Tom 
peopleArray's Size = 3 

が、私は二人目を追加すると、私が得る:

PERSON AT ROW 2 = Tom 
peopleArray's Size = 4 
PERSON AT ROW 3 = Ralph 
peopleArray's Size = 4 

はなぜ印刷ではありませんこれは何版画ですアレイの誰もが?このパターンは続行され、2人の人物しか印刷されません。それは常に最後の2人です。私は何が足りないのですか?

--- を更新しました---

[OK]をクリックします。私の細胞は正しく更新されておらず、私はアドバイスを求めたものが私を助けようとしていると考えました。私はそれが主要な問題ではなかったと思う。

私の問題は、私の行が適切な情報を印刷していないことです。ビュー最初の負荷は私が取得する場合:

Melissa 
Dave 

を私はトムを追加した後、私が取得:

Melissa   Dave 
Melissa or Dave 
Tom    Tom 

と私はラルフを追加した後、私が取得:

Melissa   ? 
Tom  or ? 
Tom    Tom 
Ralph   Ralph 

起こっていますに?

+0

テーブルの更新方法? – TommyG

+1

**テーブルビューが正しく更新されない**。新しいアイテムを追加するときにあなたのアプリには何が表示されますか?あなたは 'NSLog'の出力についてのみ話しましたが、実際のUIで何が問題なのか説明しませんでした。 – sch

+0

問題は正しく更新されているセルだと思います。 'self.peopleArray'を印刷すると、それぞれの人物を追加した後、それぞれの人物が表示されます。しかし、それがセルに表示されると、すべての名前が正しく表示されるわけではありません。 – tazboy

答えて

1

問題は再利用されているセルのラベルを更新していないことです。セルが新しく作成されると、一度だけ設定されます。したがって、あなたのコードを次のように変更してください:

if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 
} 
cell.textLabel.text = [[self.peopleArray objectAtIndex:indexPath.row-1] name]; 
NSLog(@"PERSON AT ROW %d = %@", indexPath.row-1, [[self.peopleArray objectAtIndex:indexPath.row-1] name]); 
NSLog(@"peopleArray's Size = %d", [self.peopleArray count]); 
+0

彼は明らかに、NSLogsがcellForRowAtIndexPathの内部にあるので、 – Alladinian

+0

心配はありません。目の2つのペアは常に1つより優れています:) – Alladinian

+0

私は新しい友達を作ったようですね!ありがとうございました。かっこが原因でした。私はそれを捕らえたのかどうかはわかりません。どうもありがとうございます。ああ、今は、 "更新されたもの"だけでなく、行0を含む各人物とその行を印刷します。再度、感謝します! – tazboy

1

あなたはcellForRowAtIndexPathでNSLogを呼び出しています。 セルが新しくなってから初めてログに記録されますが、それ以降はオフスクリーンになるまでキャッシュされたままになります。あなたのテーブルは小さいので、最初のセルは常に画面に表示され、決して再作成されません。セルではなくデータソースを監視したい場合はNSLogをどこか別の場所に移動してみてください(大きなテーブルを読み込んでスクロールしてコンソールを観察すると意味が分かります)

関連する問題