UISegmentedControl с UITableVIew NSRangeException - PullRequest
0 голосов
/ 24 марта 2010

Я использую один UIViewController, как показано:

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

Я отображаю RSS-канал в UITableView (в RssViewController) в зависимости от сегмента, выбранного в UISegmentedControl.

Мое приложение падает, когда я прокручиваю табличное представление и затем выбираю другой сегмент UISegmentedControl. Например, у меня есть два канала RSS по умолчанию. Я отображаю канал RSS в сегменте 0. Этот канал содержит 36 строк. Канал RSS, который я загружаю в сегменте 1, имеет только 5 строк. Когда я прокручиваю RSS-канал в сегменте 0 ТО, прежде чем прокрутка прекратится, я переключаюсь на RSS-канал в сегменте 1, я вырываю приложение со следующей ошибкой:

* Завершение работы приложения из-за необработанного исключения «NSRangeException», причина: «* - [NSCFArray objectAtIndex:]: индекс (36) за пределами (0)»

Если я подожду, пока прокрутка RSS-канала в сегменте 0 остановится, ТОГДА выберите сегмент 1, все будет нормально.

Как я могу остановить этот сбой? Я хотел использовать тот же самый табличный вид, потому что меняются только данные. Я вижу, что происходит сбой из-за количества строк - я перешел с 36 строк до 5 строк, НО, как я могу это исправить?

Любая помощь / предложения будут оценены.

1 Ответ

0 голосов
/ 24 марта 2010

Быстрый и грязный подход заключается в проверке границ массива, который вы просматриваете в tableView:cellForRowAtIndexPath: и возвращении пустой строки, если indexPath.row больше или равно [array count].

Вы также можете попробовать использовать deleteRowsAtIndexPaths:withRowAnimation: при переключении сегментов или явно прокрутить, используя scrollToRowAtIndexPath:atScrollPosition:animated:. Я предполагаю, что вы уже звоните reloadData и что это не прерывает прокрутку?

...