我有一个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];
,但这会产生不良副作用,删除选定的索引。
答案 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]];