2009-03-26 10 views
2

別のビューから情報を挿入した後に更新する必要があるtableViewがあります。私が実行した場合iPhone SDK:新しい行でUITableViewを挿入して更新する

[self.tableView reloadData]; 

私は別のビューで多くの情報を挿入し、テーブルを再ロードしようとする非常に次の時間、すべての現在表示されている行が重複しています。私はアプリを起動したときに言い換えれば

、私が持っている:

tableView: 
    Row 1 
    Row 2 

それから私は、テーブルに表示されますいくつかの情報を提出し、突然、私が持っている:

tableView 
    Row 1 
    Row 2 
    Row 3 <- info I just added 
    Row 1 
    Row 2 

マイnumberOfRowsInSectionの実装は次のようになります。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [ItemsController sharedItemsController].count; 
} 

私のcellForRowAtIndexPath実装は次のようになります。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    ItemsController* controller = [ItemsController sharedItemsController]; 
    NSMutableArray* recentItems = controller.listOfRecentItems; 

    CustomCell *cell = nil; 
    NSUInteger row = [indexPath row]; 

    if(row < recentItems.count) 
    { 
     Items* item = [recentItems objectAtIndex:row]; 
     if(recentCellData == nil) 
      recentCellData = [[NSMutableDictionary alloc] initWithCapacity:[indexPath length]]; 

     if([recentCellData count] > 0) 
      cell = [recentCellData objectForKey:[NSString stringWithFormat:@"%d", row]]; 
     if (cell == nil) { 
      UIViewController * view1 = [[UIViewController alloc] initWithNibName:@"CustomCell" bundle:nil]; 

      cell = (CustomCell*)[view1 view]; 

      [recentCellData setObject:cell forKey:[NSString stringWithFormat:@"%d",row]]; 
     } 

     // do some other stuff here 
    } 
    // Set up the cell 
    return cell; 
} 

テーブルを更新して現在表示されている行を複製しないようにするにはどうすればよいですか。 すべての助けを先にありがとう!

+0

あなたの質問にtableView:numberOfRowsInSection:メソッドの実装を含める必要があるようです。 – dstnbrkr

+0

質問にその情報を追加しました。ありがとう! – Jeff

答えて

3

エラーは、テーブルを再読み込みする方法ではなく、データをどのように提供しているかにあります。データソースメソッドと新しい行を追加するメソッドにブレークポイントを設定して、どこが間違っているかを確認します。

1

私は上記のビット情報を追加しました。

2

tableView:numberOfRowsinSection:5の場合は、5つのアイテムで終了します。あなたの質問に簡単な答えがありますが、ここには他の問題があります。なぜあなたはこのテストを持っているのだろうかと思っています:row < recentItems.count。その配列は[ItemsController sharedItemsController].countと同じですか?両方のメソッドで同じ配列を使用する必要があります。

(また、それは構文エラーではありませんが、あなたはプロパティとして宣言されていないもののために、プロパティの構文を使用しないでください。あなたが代わりに[recentItems count]を記述する必要があります。)

私も混乱していますコードを使用してセルを設定します。細胞は再利用可能であることを意味する。つまり、1つのセルを作成し、実装時に毎回tableView:cellForRowAtIndexPath:を再設定します。コードでは、リスト内の各項目のセルが作成されます。これは非常にメモリが不十分で、このようにたくさんのセルをメモリに保存すると、iPhoneのメモリ不足のためにプログラムがクラッシュする可能性があります。

dequeueReusableCellWithIdentifier:を呼び出すことをお勧めします。それがnilを返す場合は、initWithFrame:reuseIdentifier:イニシャライザを使用してセルを設定します。テーブルビューは非常にスマートで、必要なときにセルを再描画するように頼むだけです。

あなたのrecentCellData辞書は私にとっても本当に不安定に見えます。キー@"2"の項目の後ろに項目を挿入するとどうなりますか?キー@"3"以降のすべてのアイテムは、期待どおりに動作するためには、1つの要素を右側に移動する必要があります。それは私にはむしろ不必要なような簿記です。このようなものが本当に必要な場合は、明確にするために、私はあなたがそう思わないと思います。NSMutableArrayを使用するのはなぜでしょうか?

+0

NSMutableArrayを使用しています。ビューの表示方法はすべてです。私がアプリを終了して再起動すると、すべてが表示されるはずです。 – Jeff

+0

recentCellDataを参照していました。それは辞書です。 – Alex

+0

私はあなたが何を意味するかを見ます。私がこれに取り組むことができるかどうか見てみましょう... – Jeff

関連する問題