我有两个不同的表视图,其中我在tableView:MoveRowAtIndexPath:ToIndexPath:
中使用完全相同的代码来支持用户重新排序行。其中一个tableViews工作得很好。然而,另一个混淆并开始显示相同的子视图,无论选择哪一行 - 即它的行索引似乎搞砸了。
我暂时通过在[tableView reloadData]
方法的末尾添加MoveRowAtIndexPath
来修复此问题,但我不明白为什么它首先没有工作 - 特别是因为另一个视图使用完全相同的代码完美地工作。显然,在这个视图控制器中必须有另一种方法搞砸了,但我不知道在哪里看。
以下是两个相同的代码:
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
userDrivenDataModelChange = YES;
NSMutableArray *things = [[fetchedResultsController fetchedObjects] mutableCopy];
NSManagedObject *thing = [[self fetchedResultsController] objectAtIndexPath:fromIndexPath];
[things removeObject:thing];
[things insertObject:thing atIndex:[toIndexPath row]];
int i = 0;
for (NSManagedObject *mo in things)
{
[mo setValue:[NSNumber numberWithInt:i++] forKey:@"displayOrder"];
}
[things release], things = nil;
[managedObjectContext save:nil];
userDrivenDataModelChange = NO;
}
(对于它的价值,有效的是那个没有的视图的子视图,它们处于多对数核心数据关系中。)
答案 0 :(得分:0)
为
中的每个tableviews使用不同的标识符如果您使用相同的标识符字符串,它们将拾取彼此的缓存单元格对象并显示不一致的数据。
答案 1 :(得分:0)
我忘了我在父视图上使用自定义单元格,并且用户在单元格中按下了UIButton,而不是单元格本身。自定义单元格的索引路径由tableView:cellForRowAtIndexPath:
设置为属性,当然,在移动表格单元格后,它们永远不会再被调用。因此,我必须添加[tableView reloadData]
以确保更新单元格。