尝试删除tableView中的行时,应用程序因SIGABRT错误而崩溃

时间:2012-03-09 16:39:54

标签: ios uitableview crash sigabrt delete-row

当用户尝试从UITableView中删除一行时,我的应用程序崩溃,而在调试器中,我收到了SIGABRT错误。

以下是我的删除代码:

- (void) tableView:(UITableView *)tableView
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
forRowAtIndexPath:(NSIndexPath *)indexPath
{
  if (editingStyle == UITableViewCellEditingStyleDelete)
  {
    [[self displayedObjects] removeObjectAtIndex:[indexPath row]];


    //  Animate deletion
    NSArray *indexPaths = [NSArray arrayWithObject:indexPath];
    [[self tableView] deleteRowsAtIndexPaths:indexPaths
                            withRowAnimation:UITableViewRowAnimationFade];
    //[[self tableView] deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]];
  }
}

4 个答案:

答案 0 :(得分:1)

我在另一个问题上得到了帮助。问题是该对象将从数组中删除但是在从表视图中删除行之前,再次调用numberOfRowsInSection,然后再次从磁盘加载数组并在删除前给出数字,因为我的问题加载数组。我在numberOfRowsInSection上设置了一个断点,现在一切都清楚了。

答案 1 :(得分:0)

您的[self displayedObjects]项目是否覆盖[indexPath row]?例如,您的[self displayedObjects]只有5个项目,但您想要removeObjectAtIndex:6

答案 2 :(得分:0)

我与我的代码进行了比较,看看你哪里出错了。

        //Removes From Table
    [favorites removeObjectAtIndex:indexPath.row];
    [tableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft];

收藏夹是我的阵列。我认为你需要做的是改变这一行:

   [[self displayedObjects] removeObjectAtIndex:[indexPath row]];

首先,将该行放在此行之前:

[[self tableView] deleteRowsAtIndexPaths:indexPaths
                            withRowAnimation:UITableViewRowAnimationFade];

然后将self更改为表格所显示的数组名称。

同时!非常重要

确保表格显示的数组是NSMutableArray而不是NSArray

使用NSArray,您无法更改(添加或删除)值。但是,您可以使用NSMutableArray,因此请确保您没有显示NSArray

答案 3 :(得分:0)

如果我没弄错的话,你就是在调用这段代码:

 [[self tableView] deleteRowsAtIndexPaths:indexPaths
                            withRowAnimation:UITableViewRowAnimationFade];

来自已提交的删除事件。我相信你需要做的就是从“tableView:commitEditingStyle:forRowAtIndexPath:”方法更新你的后备存储。删除已经提交。您可能还需要刷新表视图,并确保将表视图标记为允许更新。

尝试评论所有这些代码并告诉我们会发生什么:

//  Animate deletion
NSArray *indexPaths = [NSArray arrayWithObject:indexPath];
[[self tableView] deleteRowsAtIndexPaths:indexPaths
                        withRowAnimation:UITableViewRowAnimationFade];