所以我使用 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;
这对于所有其他标签和 ImageView 都是如此。当这一切发生时,字典中会填充来自服务器的信息。然后,该信息将再次在 cellForRowAtIndexPath
中用于填充单元格的剩余 50%。在 willDisplayCell
中,我根据对 Core Data 中保存的信息和从互联网下载的信息进行的计算,进行了一些影响文本颜色等小事情的计算。另外,在 willDisplayCell
中,我检查是否已从互联网下载所有信息。如果有,我会循环访问获取的结果,并根据与之前完成的完全相同的计算更改名为 sectionsSort
的 Attribute
。换句话说,一旦加载完成,TableView 就会进行计算以确定特定单元格应该进入哪个部分。然后,NSFRC 对 UITableView 进行排序,将所有内容放入正确的部分。
我知道这个过程有点不确定,因为我们在加载所有内容后设置部分。我已尽力妥善处理一切,例如当这一切发生时,我不允许用户进行任何交互,并且只有在从互联网下载所有内容后我才设置部分信息。然而,我显然没有考虑到一些事情,因为 NSFRC 似乎在彼此之上创建重复的单元格。我可以看出,因为在几个单元格上有一个半透明的背景,由于重叠而变得加倍强烈。它们的出现和消失似乎取决于您在 TableView 中的位置,这会导致多个故障。我显然在某个地方使用了 NSFRC 错误,但我只是不知道在哪里。
如果您能帮助我诊断这个问题,我将不胜感激。
问候,
迈克
更新:我想我刚刚找到了一个潜在的原因。在 viewDidAppear 上,我设置了每个实体的部分。似乎每次我保存实体 NSFRC 时都会在屏幕上重新创建行。这是一个正确的推论吗?
更新 2 似乎还有更多的事情要做。最后 6 个单元格甚至不被 NSFRC 识别,尽管它们已显示。当我按下“编辑”按钮时,除了最后 6 个应用程序之外,所有应用程序都会向右移动(正如它们应该的那样)。发生了大量奇怪的行为。我的 willDisplayCell
中的 NSLog 似乎会持续很多次,即使 TableView 没有滚动。
更新3好吧,我设置部分的代码肯定是问题所在。只需注释掉所有内容即可正常工作。以下是我为每个实体设置部分的方法:
for (id i in fetchedResultsController.fetchedObjects) {
myEntity *myEntity = i;
DownloadResult *downloadResult = [[DownloadResult alloc] init];
downloadResult = [downloadResultsDictionary objectForKey:myEntity.entityName];
if (condition)
{
myEntity.sectionSort = @"2";
NSError *error;
if (![self.managedObjectContext save:&error]) {
NSLog(@"Error: %@", error);
FATAL_CORE_DATA_ERROR(error);
return;
}
}
else if (...
我这样做的方式显然有问题,因为它使 NSFRC 进入超速状态并导致多个故障。
最佳答案
已修复。归根结底是愚蠢的错误。我忘记重新加载 TableView!
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView endUpdates];
[self.tableView reloadData];
}
关于iphone - NSFetchedResultsController 在彼此之上创建重复的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14182396/