2012-01-14 7 views
0

私はUITableViewからセルをロードし、それらをNSMutableArrayに入れて後で反復しようとしています。私はpopulateArrayWithCellsというメソッドを持っています。これは6つ以上のセルを入れるまでうまく動作します。なんらかの理由で返されるオブジェクトはnilです。私のコードは、以下であるStocksAndAccountsでのUITableViewとIBActionを通じて呼び出されたときに、私は、セクションのUITableViewCells 1UITableViewのUITableViewCellsをループする

- (void) populateArrayWithCells 
{ 
for (int i = 0; i < [StocksAndAccounts numberOfRowsInSection:1]; i++) { 
    if ([StocksAndAccounts cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:1]] == nil) { 
     NSLog(@"object at index %i is nil", i); 
    } 
    [stocksCells addObject:[StocksAndAccounts cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:1]]]; 
} 
} 

にこの関数をサブクラス化している、インデックスは、それがある場合には、6になるまでsuccessfuly細胞を返しますnilのオブジェクトを追加しようとしているので、nilとクラッシュします。この問題の助けがあれば大歓迎です。

+0

なぜそれをしたいですか? – bryanmac

+0

Uitableviewにはデータのデリゲートコールバックパターンがあり、セル再利用キューがあります – bryanmac

+0

合意 - なぜこれをやりたいのですか?これは設計上の瑕疵のようなにおいがする。 –

答えて

1

あなたはUITableViewsのしくみを誤解していると思います。テーブルビュー内のセルは、表示する必要があるときにのみロードされ、リサイクルされるので、一度に画面上に6つのセルしか表示できない場合、テーブルには6つのセルしか含まれず、あなたが上下にスクロールするものと同じ6つ。

テーブル・セルにデータを格納する代わりに、ビュー・コントローラ内のカスタム・オブジェクトの配列に格納し、これらのオブジェクトを使用して表がデータ・ソース・メソッドから要求されたときにセルを移入します。

このようにして、テーブルに表示する以外の目的でそのデータを使用する必要がある場合は、テーブルセルからコピーするのではなく元のオブジェクトから再作成することができます。

+0

カスタムオブジェクトの配列にデータを格納し、cellforrowatindexpathで使用する方法をコードで教えてください。 –

1

あなたはそれを逆にしています。

あなたのNSMutableArray(およびそれよりも丈夫なモデル)は、あなたのUITableViewに表示したいものを保持する必要があります。 Model-View-Controllerデザインパターンを確認してください。

関連する問題