具有多个部分的UITableView:包含1行的部分,删除该行会导致应用崩溃

时间:2010-06-14 14:33:18

标签: iphone objective-c exception uitableview

我有tableView个多个部分。当一个部分只包含一行时,如果我尝试删除该行,我的应用程序在执行此代码时崩溃:

[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];

我得到了这个例外:

*** Terminating app due to uncaught exception 'NSRangeException', 
reason: '*** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)'

每个部分都有一个数组。这些数组中的每一个都包含要以行显示的对象。然后是另一个包含这些数组的数组。

知道我做错了什么吗? 谢谢。

编辑

好的,我刚刚在调试器中看到它是崩溃的tableView: titleForHeaderInSection方法,因为我在刚刚删除的数组中得到了节的标题。所以我试图访问一个带有0对象的数组在它...

3 个答案:

答案 0 :(得分:0)

最简单的解释是indexPath为nil,导致将空数组传递给delete方法。

记录indexPath的值以进行确认。

答案 1 :(得分:0)

表视图有一个源,源包含要显示的部分和行的列表。当您执行[tableView deleteRowsAtIndexPaths:withRowAnimation:]调用时,表视图会更新表,但源现在不同步(它具有您刚刚删除的行)。解决方案是在更新表视图本身之前更新源(即数组或核心数据或其他)。

答案 2 :(得分:0)

如果部分中只有一行,则应删除该部分。以下是删除部分的代码。 [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationTop];