我需要你的帮助:(
我正在开发一个iOS应用程序,我必须在UItableView中删除一些行和部分。
我在使用Xcode 4。
我将tableView与NSarray和字典相关联,如下所示:
NSMutableArray *arrTemp1 = [[NSMutableArray alloc]
initWithObjects:@"Chris",nil];
NSMutableArray *arrTemp2 = [[NSMutableArray alloc]
initWithObjects:@"Bianca",nil];
NSMutableArray *arrTemp3 = [[NSMutableArray alloc]
initWithObjects:@"Candice",@"Clint",@"Chris",nil];
NSMutableArray *arrTemp4 = [[NSMutableArray alloc]
initWithObjects:@"Candice",@"Clint",@"Chris",nil];
NSMutableArray *arrTemp5 = [[NSMutableArray alloc]
initWithObjects:@"Candice",@"Clint",@"Chris",nil];
NSMutableArray *arrTemp6 = [[NSMutableArray alloc]
initWithObjects:@"Candice",@"Clint",@"Chris",nil];
NSMutableDictionary *temp = [[NSMutableDictionary alloc]
initWithObjectsAndKeys:arrTemp1,@"A",arrTemp2,
@"B",arrTemp3,@"C",arrTemp4, @"D", arrTemp5, @"E", arrTemp6, @"J",nil];
self.tableContents = temp;
self.sortedKeys =[[self.tableContents allKeys]
sortedArrayUsingSelector:@selector(compare:)];
当我需要删除行或部分时,我正在使用此代码 - >
(void)tableView:(UITableView *)tableView
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
NSMutableArray *listData = [self.tableContents objectForKey:
[self.sortedKeys objectAtIndex:[indexPath section]]];
NSUInteger row = [indexPath row];
[listData removeObjectAtIndex:row];
[tableView beginUpdates];
if ([listData count] > 0)
{
// Section is not yet empty, so delete only the current row.
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
}
else
{
// Section is now completely empty, so delete the entire section.
[tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section]
withRowAnimation:UITableViewRowAnimationFade];
}
[tableView endUpdates];
}
}
当我删除行时,效果很好.. 当我删除部分时,我收到以下错误: “的 *在声明失败 - [UITableView的_endCellAnimationsWithContext:],/SourceCache/UIKit/UIKit-1912.3/UITableView.m:1030 2012-01-13 16:42:45.261 * 由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:无效的节数。更新后的表视图中包含的节数(6)必须等于更新前的表视图中包含的节数(6),加上或减去插入或删除的节数(0插入,1删除)'。“
(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [tableContents count]; // tableContent is a NSMUtableDictionnary*
}
- (NSInteger)tableView:(UITableView *)table
numberOfRowsInSection:(NSInteger)section
{
NSArray *listData =[self.tableContents objectForKey:
[self.sortedKeys objectAtIndex:section]];
return [listData count];
}
我变得疯狂了,来到stackOverflow寻求帮助......
(抱歉我的英文不好:()
感谢大家阅读和回答!!
答案 0 :(得分:2)
当它不包含任何对象时,您实际上并没有删除空数组的字典键,因此您调用
// Section is now completely empty, so delete the entire section.
[tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section]
withRowAnimation:UITableViewRowAnimationFade];
导致问题,因为您仍然具有与之前相同数量的部分(字典键)...
答案 1 :(得分:1)
尝试更换这两行:
[listData removeObjectAtIndex:row];
[tableView beginUpdates];
所以它应该是:
[tableView beginUpdates];
[listData removeObjectAtIndex:row];