使用 UITableView 的奇怪崩溃
Posted
技术标签:
【中文标题】使用 UITableView 的奇怪崩溃【英文标题】:Strange crash using UITableView 【发布时间】:2013-07-15 12:31:53 【问题描述】:我有两个不同的UIViewController
s。
第一个有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 个单元格后失败
reloadRowsAtIndexPaths:withRowAnimation: 使我的应用程序崩溃
由于 NSManagedObjectContext 保存而更新 NSFetchedResultsController 时延迟 UITableView 更新