tableView:editActionsForRowAtIndexPath:获取nil indexPath

时间:2017-10-23 06:24:12

标签: ios objective-c uitableview

我已经实现了tableView:editActionsForRowAtIndexPath:函数,但是我间歇地遇到传递给此函数的indexPath为零。当我尝试访问indexPath.row时,其值为18446744073709551615。

我在查询用于构建表的数组中的对象。并导致崩溃 - -[__NSArrayM objectAtIndex:]: index 18446744073709551615 beyond bounds [0 .. 1]'

有一种情况我使用[table reloadData]一个editAction调用重新加载我的表然后会传递一个nil indexPath,但是这仍然是间歇性的。

有什么方法可以强制将正确的indexPath传递给tableView:editActionsForRowAtIndexPath:

1 个答案:

答案 0 :(得分:0)

您必须实现此- (void)tableView:(UITableView *)tableView commitEditingStyle方法,其中需要调整数据数组。

详情请参阅本文Inserting and Deleting Rows and Sections

您可以通过删除与之对应的项目来处理此问题 首先从data数组开始行,然后将deleteRowsAtIndexPaths:withRowAnimation:发送到表视图。

尝试在- (void)tableView:(UITableView *)tableView commitEditingStyle方法中插入以下代码行:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
   if ( editingStyle== UITableViewCellEditingStyleDelete) {

      // remove item from array at first 
      [dataArray removeObjectAtIndex:indexPath.row];

      // then delete table row from tableview
      [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
   }
}

希望它能奏效!