0

示されているように、私は1つの UIViewController を使用しています:

@interface RssViewController : UIViewController <UITableViewDataSource,UITableViewDelegate,BlogRssParserDelegate>

UISegmentedControl で選択されたセグメントに応じて、UITableView (RssViewController 内) に RSS フィードを表示しています。

テーブルビューをスクロールして UISegmentedControl の別のセグメントを選択すると、アプリがクラッシュします。たとえば、デフォルトで 2 つの RSS フィードがあり、RSS フィードをセグメント 0 に表示しています。このフィードには 36 行あります。セグメント 1 で読み込む RSS フィードには 5 行しかありません。セグメント 0 で RSS フィードをスクロールすると、スクロールが停止する前にセグメント 1 で RSS フィードに切り替えると、次のエラーでアプリがクラッシュします。

* キャッチされない例外 'NSRangeException' が原因でアプリを終了します。理由: '* -[NSCFArray objectAtIndex:]: 境界 (0) を超えたインデックス (36)'

セグメント 0 で RSS フィードのスクロールが停止するまで待ってから、セグメント 1 を選択すると、すべて正常に動作します。

どうすればこのクラッシュを止めることができますか? データのみが変更されるため、同じテーブルビューを再利用したかったのです。行数が原因でクラッシュしていることがわかります-36行から5行に減少しましたが、どうすればこれを修正できますか?

ヘルプ/提案をいただければ幸いです。

4

1 に答える 1

0

手っ取り早い方法は、見ている配列の境界をチェックし、が より大きいか等しいtableView:cellForRowAtIndexPath:場合は空の文字列を返すことです。indexPath.row[array count]

deleteRowsAtIndexPaths:withRowAnimation:セグメントを切り替えるときにを使用したり、 を使用して明示的にスクロールしたりすることもできますscrollToRowAtIndexPath:atScrollPosition:animated:。あなたはすでに電話reloadDataをかけていて、スクロールを妨げていないと思いますか?

于 2010-03-23T21:23:53.120 に答える