2010-03-23 44 views
0

我使用一个UIViewController中,如下所示:UISegmentedControl用的UITableView NSRangeException

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

我取决于对UISegmentedControl选择的段显示在所述的UITableView(在RssViewController)RSS订阅源。

我的应用程序崩溃时我滚动tableview中,然后选择UISegmentedControl的另一部分。例如,我默认有两个RSS提要,我在段0显示RSS提要。此提要有36行。我在第1段加载的RSS源只有5行。当我在滚动停止前滚动段0处的RSS源时,我切换到段1处的RSS源,导致应用程序崩溃,并出现以下错误:

*由于未捕获的异常'NSRangeException' '* - [NSCFArray objectAtIndex:]:指数(36)超出范围(0)'

如果我等到RSS种子的滚动,在段0停止然后选择段1,一切工作正常。

我怎样才能阻止这种崩溃?我想重复使用相同的tableview,因为只有数据发生了变化。我可以看到它由于行数而崩溃 - 我从36行降到5行,但我该如何解决这个问题?

任何帮助/建议将不胜感激。

回答

0

快速和肮脏的方法是在tableView:cellForRowAtIndexPath:检查你正在寻找的数组的边界处,如果indexPath.row大于或等于[array count]返回一个空字符串。

您也可以尝试转换段时,或者明确地使用滚动使用scrollToRowAtIndexPath:atScrollPosition:animated:deleteRowsAtIndexPaths:withRowAnimation:。我假设你已经调用reloadData,它不中断滚动?

+0

嗨,右 - 我用reloadData,它不中断滚动。我会尝试你的建议,并让你知道我是如何制定出来的。感谢您及时的回复。 – CraigH 2010-03-23 21:42:25

+0

再次嗨。好的,我在第一个建议中解决了问题。如果时间允许,我会尝试其他建议。现在,在tableView:cellForRowAtIndexPath中照顾它:就可以做到这一点。谢谢。 – CraigH 2010-03-23 21:48:52

相关问题