为什么重新排序我的tableView会弄乱我的数据?

时间:2011-04-24 19:33:55

标签: iphone cocoa-touch uitableview core-data

我有两个不同的表视图,其中我在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;
}

(对于它的价值,有效的是那个没有的视图的子视图,它们处于多对数核心数据关系中。)

2 个答案:

答案 0 :(得分:0)

中的每个tableviews使用不同的标识符
  • (UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier

如果您使用相同的标识符字符串,它们将拾取彼此的缓存单元格对象并显示不一致的数据。

答案 1 :(得分:0)

我忘了我在父视图上使用自定义单元格,并且用户在单元格中按下了UIButton,而不是单元格本身。自定义单元格的索引路径由tableView:cellForRowAtIndexPath:设置为属性,当然,在移动表格单元格后,它们永远不会再被调用。因此,我必须添加[tableView reloadData]以确保更新单元格。