2010-03-23 3 views
0

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

@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 строк, но как я могу это исправить?

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

ответ

0

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

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

+0

Hi, Right - Я использую reloadData и не прерываю прокрутку. Я попробую ваши предложения и дам вам знать, как я разобрался. Спасибо за быстрый ответ. – CraigH

+0

Привет снова. Хорошо, я решил проблему с вашим первым предложением. Я попробую ваши другие предложения, когда позволит время. Пока, заботясь об этом в tableView: cellForRowAtIndexPath: делает трюк. Благодарю. – CraigH

Смежные вопросы