UITableView endUpdates 在 viewDidLoad 中调用时崩溃
Posted
技术标签:
【中文标题】UITableView endUpdates 在 viewDidLoad 中调用时崩溃【英文标题】:UITableView endUpdates crash when called in viewDidLoad 【发布时间】:2012-10-11 11:33:36 【问题描述】:我有一个 UITableView,我想在我的视图控制器的 viewDidLoad 中修改它。 但是 UITableView 不会在 viewDidLoad 中查询它的数据源,所以我先调用 reloadData,然后用 beginUpdates 和 endUpdates 修改它的单元格。 (就我而言,我只是删除了一些单元格)。 但是当 endUpdates 被调用时,它会抛出一个异常:
[__NSArrayM insertObject:atIndex:]: 空数组的索引 1 超出范围。
这个异常是什么意思? 我知道我正在向 UITableView 返回正确的数字,因为如果我在 viewDidAppear 之后调用它,它可以完美运行,它只是在 viewDidLoad 中不起作用。
编辑:
这是我的代码
for (int i = 0; i < [customDataSource numberOfSectionsInTableView]; i ++)
NSInteger n = [customDataSource tableView:self numberOfRowsInSection:section];
NSMutableArray* array = [[NSMutableArray alloc] initWithCapacity:n];
for (NSInteger i = 0; i < n; i++)
[array addObject:[NSIndexPath indexPathForRow:i inSection:section]];
[super beginUpdates];
[super deleteRowsAtIndexPaths:array withRowAnimation:UITableViewRowAnimationNone];
[super endUpdates];
当我将此代码从 viewDidAppear 移动到 viewDidLoad 或 viewWillAppear 时,它会崩溃。
【问题讨论】:
您是在调用开始/结束更新之前还是之后设置阵列? 我正在我的 appDelegate 的 applicationDidFinishedLaunchingWithOptions: 中设置我的数组,这当然是在调用 viewDidLoad 之前。 请编辑您的帖子以显示您的 viewDidLoad。 在我的 viewDidLoad 中没有任何东西会告诉你这个错误是如何发生的。我开发了一个从 UITableView 继承的自定义 tableview,我在我的视图控制器中使用这个自定义 tableview。然后我必须在这里发布十几个千字节的代码,但我不能。你到底想知道什么信息? 这一切似乎没有多大意义。它是视图类中的控制器代码,开始/结束更新应该包含整个块,然后为什么要删除视图上尚未显示的任何内容? 【参考方案1】:看起来您正试图将索引 1 处的对象插入空数组。如果数组为空,则唯一可接受的插入索引是 0。检查如何计算索引值。
【讨论】:
以上是关于UITableView endUpdates 在 viewDidLoad 中调用时崩溃的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 意外反弹 beginUpdates()/endUpdates()/performBatchUpdates()
endUpdates 后的 UITableView 部分页脚视图位置
UITableView beginUpdates/endUpdates 同时滚动使滚动跳转
执行“beginUpdates”“endUpdates”时 UITableView 页脚视图的动画问题