无法使deleteRowsAtIndexPaths正常工作

时间:2012-01-07 23:44:29

标签: iphone objective-c xcode uitableview

我有一个UITableView和一个在后台运行的调度程序从基础数据对象中删除记录。 每次删除对象时,我都希望表视图相应更新。

但是当我尝试从表视图中删除一行时,我不断收到这条恼人的错误消息。

* 由于未捕获的异常NSInternalInconsistencyException而终止应用程序,原因:“与UITableView一起使用的索引路径无效。传递到表视图的索引路径必须包含两个指定的索引部分和行。如果可能,请使用NSIndexPath UITableView.h上的类别。

代码:

NSIndexPath *indexPath = [NSIndexPath indexPathWithIndex:0];
NSUInteger row = [indexPath row];

NSMutableArray* files = [[NSMutableArray alloc] initWithArray:fileNames];
[files removeObjectAtIndex:[indexPath row]];
[fileNames dealloc];
fileNames = [NSArray arrayWithArray:files];

//[self.fileNames removeObjectAtIndex:row];
[self.tableDraft deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];

PS: 我也尝试了[tableView reloadData];,但这会产生不良副作用,删除选定的索引。

3 个答案:

答案 0 :(得分:21)

您是否考虑过留言?您的索引路径不包含行和节组件。使用+[NSIndexPath indexPathForRow:inSection:]创建索引路径对象,以便它具有表视图所需的信息:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

答案 1 :(得分:2)

你需要使用它:

  

NSIndexPath * indexPath = [NSIndexPath indexPathForRow:rowIndex   切入口:sectionIndex];

答案 2 :(得分:0)

像这样使用

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:sender.tag-1 inSection:0];

CGRect rectOfCellInTableView = [objTableView rectForRowAtIndexPath:indexPath];

CGRect rectOfCellInSuperview = [objTableView convertRect:rectOfCellInTableView toView:[objTableView superview]];