当用户尝试从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]];
}
}
答案 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];