2012-03-14 3 views
0

私は、データソースとしてNSMutableArrayを使用するUITableViewControllerを持っています。配列は、Webサービスを呼び出してデータを取得し、NSMutableArrayを生成することによって、最初はviewDidLoadメソッドに実装されます。その後、ユーザは(UISearchBar内に)検索タームを入力し、Searchを押してWebサービスを再実行してテーブルリストを再作成するオプションを持っています。この時点で、配列を空にして、Webサービスの結果からテーブルを再作成する必要があります。私の質問は、テーブルビューの再描画を怒らせることなくこれを行う正しい方法は何ですか? 2つのオプションがあります:目的C - NSMutableArrayでUITableViewControllerを空にしてリロードする正しい方法

  1. [listArray removeAllObjects];次に、[[self tableView] reloadData];アレイを再増殖させる。

  2. リストを最大200行に制限するので、200個の項目で配列を初期化し、検索の実行時に削除して再追加する代わりに[listArray replaceObjectAtIndex:を使用して各行を置き換えます。この場合、返される行数を保持し、 'tableView numberOfRowsInSection'メソッドでこれを使用するint変数が必要になるため、tableviewは返される行数のみを表示します。

希望がある!リストを再ロードするときに断続的なエラー(EXC_BAD_ACCESS)が発生したため、質問をしています。リストを空にして再ロードする方法と関係があると確信しています。 。

任意の助け理解、

ジョナサン

UPDATE:のviewDidLoadの配列を初期化する

コード:データが取得されたら、次のように

tableListDataArray = [[NSMutableArray alloc] init]; 

、それがアレイに追加され:

CustSuppListItem *custSuppItem = [[CustSuppListItem alloc] init]; 
[custSuppItem setAcCode:[jsonCustSuppRecord getStringForKey:@"acCode"]]; 
[custSuppItem setAcCompany:[jsonCustSuppRecord getStringForKey:@"acCompany"]]; 
[custSuppItem setAcContact:[jsonCustSuppRecord getStringForKey:@"acContact"]]; 
[custSuppItem setOsBalBase:[jsonCustSuppRecord getDoubleForKey:@"osBalBase"]]; 
[custSuppItem setAcAccStatus:[jsonCustSuppRecord getIntForKey:@"acAccStatus"]];        
[tableListDataArray addObject:custSuppItem];       
[custSuppItem release]; 
次のように10

配列は、deallocメソッドでリリースされています

[tableListDataArray release]; 
+0

単に配列を置き換えるだけで、reloadDataを呼び出すだけで十分です。あなたが本当にしたいのでなければ、removeAllObjectsの必要はありません。あなたのエラーは、おそらくオートレリースされた配列の結果でしょう。配列変数と値の設定方法を宣言するコードを提供してください。 – Jeremy

+0

こんにちはJeremy、返信いただきありがとうございます - 上記の私の元の質問に使用しているコードを追加しました。 –

答えて

2

私は個人的にあなただけの「自己」なし

[tableView reloadData] 

を使用することができるはずですオプション1で行くだろう。 reloadDataはcellForRowAtIndexPathメソッドも呼び出します。 NSMutableArrayを使用する前に、NSMutableArrayを初期化することを忘れないでください。

myMutableArray = [[NSMutableArray alloc] initWithCapacity:9001]; 
+0

'reloadData'の+1です。 'self'が必要かどうかは、' tableView'が変数かプロパティかによって決まります。それがプロパティの場合は、提供されたアクセサ( '[self tableView]'または 'self.tableView')を使用することが理にかなっています。 – Caleb