【问题标题】:UISegmentedControl with UITableVIew NSRangeExceptionUISegmentedControl 与 UITableVIew NSRangeException
【发布时间】:2010-03-24 05:29:13
【问题描述】:

我正在使用如图所示的一个 UIViewController:

@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:]: index (36) beyond bounds (0)”

如果我等到第 0 段的 RSS 提要上的滚动停止然后选择第 1 段,一切正常。

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

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

【问题讨论】:

    标签: iphone uitableview rss uisegmentedcontrol


    【解决方案1】:

    一种快速而简单的方法是检查您在tableView:cellForRowAtIndexPath: 中查看的数组的边界,如果indexPath.row 大于或等于[array count],则返回一个空字符串。

    您也可以尝试在切换段时使用deleteRowsAtIndexPaths:withRowAnimation: 或使用scrollToRowAtIndexPath:atScrollPosition:animated: 显式滚动。我假设您已经在调用 reloadData 并且它没有中断滚动?

    【讨论】:

    • 嗨,对 - 我正在使用 reloadData 并且它不会中断滚动。我会尝试你的建议,让你知道我是怎么做到的。感谢您的快速回复。
    • 你好。好的,我用你的第一个建议解决了这个问题。如果时间允许,我会尝试您的其他建议。现在,在 tableView:cellForRowAtIndexPath: 中处理它就可以了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 2011-07-14
    • 1970-01-01
    相关资源
    最近更新 更多