使用 UITableView 的奇怪崩溃

Posted

技术标签:

【中文标题】使用 UITableView 的奇怪崩溃【英文标题】:Strange crash using UITableView 【发布时间】:2013-07-15 12:31:53 【问题描述】:

我有两个不同的UIViewControllers。

第一个NSMutableArray的订阅,它会在UITableView中加载。

第二个控制器做一些操作,并在部分代码中重新加载所有订阅。

当我打开第一个控制器时,我使用ViewDidAppear 方法重新加载表数据(订阅)。 在此操作期间,有时我的应用程序崩溃。我想是因为我在后台重新加载表格时订阅列表正在发生变化。

有没有办法即时重新加载表格并让用户滚动表格并同时重新加载它?

有关错误的更多信息

Uncaught exception: *** -[__NSArrayM objectAtIndex:]: index 3 beyond bounds [0 .. 2]

有 2 个订阅始终存在...TableView 尝试访问索引 3

有关错误的更多信息

【问题讨论】:

您能否发布有关崩溃的更多信息、一些代码,以及可能有助于我们找到好的答案的内容? numberOfRowsInSection 应该在每次更改数组时返回 [yourArray count] 并调用 [yourTable reloadData] 发布您的tableView:numberOfRowsInSection: 实施。 【参考方案1】:

订阅列表加载完成后调用tableview reload方法。 如果您使用单独的类来加载订阅,您可以使用委托通知您的主视图控制器订阅的加载已完成。否则你可以使用 NSNotificationCenter。

【讨论】:

【参考方案2】:

您需要将部分中的行数返回为数组中对象的总和。

return [self.theArrayWithTheData count];

您的问题是,当您使用不同的数组重新加载时,它会使用旧的行数,因此当您滚动过去时它会崩溃。

【讨论】:

【参考方案3】:

在调用 [__NSArrayM objectAtIndex:] 之前,重新加载数据有助于避免崩溃,使用全局变量对行数进行计数检查。

【讨论】:

以上是关于使用 UITableView 的奇怪崩溃的主要内容,如果未能解决你的问题,请参考以下文章

tableView:canEditRowAtIndexPath: 弹出 viewController 时崩溃

更新 UITableView 中显示的 CoreData 模型后应用程序崩溃

UITableView 中的自定义绘图在 5 个单元格后失败

UITableView的contentSize

reloadRowsAtIndexPaths:withRowAnimation: 使我的应用程序崩溃

由于 NSManagedObjectContext 保存而更新 NSFetchedResultsController 时延迟 UITableView 更新