【发布时间】:2012-04-03 11:03:17
【问题描述】:
我在尝试使用自定义按钮删除单元格时遇到此错误。
* 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[__NSArrayM removeObjectAtIndex:]: index 1 beyond bounds [0 .. 0]”
我的代码结构如下。我有一个自定义UITableViewCell,其中包含一个UIButton,它有一个删除单元格的操作。删除单元格的操作在我的主视图控制器中,其中包含单元格的实际indexPath。这种结构工作正常。
这是删除单元格的操作。
NSIndexPath *indexPath = [self globalIndexPath];
[self.array removeObjectAtIndex:[indexPath row]];
[db deleteTaskAtIndex:[indexPath row]];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:UITableViewRowAnimationFade];
当我在上面声明indexPath 时,globalIndexPath 属性在我的cellForRowAtIndexPath 中设置,赋予它原始indexPath 的值。这就是我宣布它的方式。
[self setGlobalIndexPath:indexPath];
现在我在这里和那里放置了一些NSLogs 来记录indexPath。例如在viewWillAppear 方法和viewDidLoad 方法中,都给了我准确的indexPath,我什至检查了array 的输出,它们都返回了准确的结果,所以我真的不知道为什么它给了我错误。
这是我的自定义单元格中的代码,用于检测何时点击按钮。
NSArray *notificationArray = [[UIApplication sharedApplication] scheduledLocalNotifications];
if (!notificationArray || !notificationArray.count)
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"DeleteSignal" object:nil];
}
else
{
UILocalNotification *notif = [notificationArray objectAtIndex:[checkbox tag]];
[[UIApplication sharedApplication] cancelLocalNotification:notif];
}
然后我使用NSNotificationCenter 和键DeleteSignal 删除单元格。
【问题讨论】:
-
尝试在 [indexPath row] >= [self.array count] 时在每次删除之前设置断点...或断言该行小于计数。此外,您是否有可能在不刷新表格的情况下删除多个项目?
-
我会尝试断点,但是是的,我已经尝试在我的
viewDidLoad和viewWillAppear中重新加载我的tableView。 -
我在删除函数之前和之后做了一个 if 语句,并写了一个日志,但我不知道它是如何工作的。
-
我希望如果您在 indexPath.row 超出数组末尾的位置遇到断点,就可以看到事情是如何不同步的。 (可能是 globalIndexPath 的逻辑。)
标签: iphone uibutton nsindexpath