NSFetchedResultsController在彼此之上创建重复的单元格

时间:2013-01-06 13:01:29

标签: iphone objective-c ios xcode

所以我使用NSFRC来填充我的UITableView。在cellForRowAtIndexPath中,我使用以下方法从Core Data加载每个单元格的信息:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"myProto"];
[self configureCell:cell atIndexPath:indexPath];

configureCell然后使用标签填充50%的单元格,例如:

MyEntity *myEntity = [self.fetchedResultsController objectAtIndexPath:indexPath];
UILabel *nameLabel = (UILabel *)[cell viewWithTag:1001];
nameLabel.text = myEntity.entityName;

对于所有其他标签和图像视图,这将继续。当所有这一切发生时,字典中会填充来自服务器的信息。然后,该信息用于填充剩余的50%的单元格,再次在cellForRowAtIndexPath中。在willDisplayCell中,我根据对Core Data中保存的信息和从Internet下载的信息进行的计算,做了一些影响文本颜色等小问题的计算。同样在willDisplayCell我会检查是否所有信息都是从互联网上下载的。如果有,我循环读取结果,并根据之前完成的完全相同的计算更改名为Attribute的{​​{1}}。换句话说,一旦加载完成,TableView就会进行计算,以确定特定单元应该进入哪个部分。然后NSFRC对UITableView进行排序,将所有内容放入正确的部分。

我知道这个程序有点不对,因为我们在加载完所有内容后设置了部分。我已尽力妥善处理所有事情,例如:所有这一切都进行后,我不允许用户进行任何交互,只有在从互联网上下载了所有内容后,我才会设置部分信息。然而,我显然没有考虑到某些因素,因为NSFRC似乎在彼此之上创建了重复的单元格。我可以说,因为在几个细胞上有一个半透明的背景,从重叠变得双重强烈。它们似乎根据您在TableView中的位置来来去去,它会导致多个故障。我显然在某处错误地使用了NSFRC,但我只是不知道在哪里。

如果你能帮我诊断出这个问题,我会非常感激 问候,
麦克

更新:想想我刚刚找到了可能的原因。在sectionsSort我设置每个实体的部分。似乎每次我保存实体NSFRC重新创建屏幕上的行。这是正确的推断吗?

更新2 似乎还有更多内容。最后6个单元格甚至不被NSFRC识别,即使它们已被显示。当我按下编辑时,除了最后的6之外,所有应用程序都向右移动(正如他们应该的那样)。正在发生一连串奇怪的行为。即使TableView没有滚动,我的viewDidAppear中的NSLog似乎也会持续很多次。

更新3 好的,所以设置该部分的代码肯定是问题所在。只是评论了所有这一切,它工作正常。以下是我为每个实体设置部分的方法:

willDisplayCell

我正在这样做的方式显然有问题,因为它正在将NSFRC发送到过载并导致多个故障。

1 个答案:

答案 0 :(得分:3)

固定。一天结束时的愚蠢错误。我忘了重新加载TableView!

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
    [self.tableView endUpdates];
    [self.tableView reloadData];
}