同时插入行和删除行。 UITableView的

所以我有一个代表video库的UITableView 。 库的数据源是一个NSMutableDictionary ,它包含每个键的NSMutableArray 。 每个数组都包含一个包含每个值的所有信息的数组。

NSMutableDictionary – > Foreach键入一个包含 – > NSMutableArrays

tableSectionData是我的数据源。

我一直试图在第一节插入一行,并删除另一节中的另一行。 这是我正在使用的代码:

编辑这是新的尝试。 我首先更新数据源,然后添加和删除与我的dataSource索引相应的行。

 [mainTableView beginUpdates]; NSMutableDictionary *clone = [[NSMutableDictionary alloc] initWithDictionary:self.tableSectionData copyItems:YES]; for (NSString *key in [clone allKeys]) { if([key isEqualToString:@"Videos available for download"]) { for (NSArray *videoArray in [clone objectForKey:key]) { if ([[videoArray objectAtIndex:0] isEqualToString:helper.videoName]) { [[self.tableSectionData objectForKey:@"Downloaded videos"] addObject:videoArray]; NSUInteger insertIndex = [[self.tableSectionData objectForKey:@"Downloaded videos"] indexOfObject:videoArray]; NSIndexPath *pathToInsert = [NSIndexPath indexPathForRow:insertIndex inSection:0]; NSArray *indexesToAddition = [NSArray arrayWithObject:pathToInsert]; [mainTableView insertRowsAtIndexPaths:indexesToAddition withRowAnimation:UITableViewRowAnimationFade]; [[self.tableSectionData objectForKey:@"Videos available for download"] removeObject:videoArray]; NSUInteger deleteIndex = [[self.tableSectionData objectForKey:@"Videos available for download"] indexOfObject:videoArray]; NSIndexPath *pathToDelete = [NSIndexPath indexPathForRow:deleteIndex inSection:1]; NSArray *indexesToDeletion = [NSArray arrayWithObject: pathToDelete]; [mainTableView deleteRowsAtIndexPaths:indexesToDeletion withRowAnimation:UITableViewRowAnimationFade]; } } } } [mainTableView endUpdates]; 

我认为这将工作,因为我必须先删除一行,如果我想插入一个(在这种情况下,我想这样做)。

具体错误如下:

 'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (4) must be equal to the number of rows contained in that section before the update (3), plus or minus the number of rows inserted or deleted from that section (0 inserted, 0 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).' 

我知道错误是什么说的,我没有对应的行数在部分,但是我没有看到我的代码上的错误,我logging了数据源,它对应于所需的结果。

任何帮助和build议将不胜感激!

您必须在开始/结束更新方法内进行所有更新。 如果您有多个UITableView更新,则始终有效。

并且不要忘记更新数据源endUpdates之前调用!

 [self.tableView beginUpdates]; // do your staff here, like: [self.tableView inserRowsAtIndexPaths:indexPathsToInsert]; [self.tableView deleteRowsAtIndexPaths:indexPathsToDelete]; [self.tableView endUpdates]; 

你的错误在这里 – 你是在你的代码示例中使用不同的开始/结束更新部分

你的dataSource在哪里?

之前删除

 [dataSource removeObjectAtIndex:nIndexDelete]; [mainTableView deleteRowsAtIndexPaths:indexesToDeletion withRowAnimation:UITableViewRowAnimationFade]; 

之前添加

 [dataSource inserObject:object atIndex:nIndexAdd]; [mainTableView insertRowsAtIndexPaths:indexesToAddition withRowAnimation:UITableViewRowAnimationFade]; 

我想你需要重新加载UITableView每次插入或删除行时返回numberOfRowsInSection中的确切数量的行…