所以我使用 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
被调用的sectionsSort
基于与之前所做的完全相同的计算。换句话说,一旦加载完成,TableView 会进行计算以确定特定单元格应该进入哪个部分。NSFRC 然后对 UITableView 进行排序,将所有内容放入正确的部分。
我知道这个过程有点不确定,因为我们在加载所有内容后设置部分。我已尽最大努力妥善处理所有事情,例如,在这一切进行时,我不允许用户进行任何交互,并且我仅在从 Internet 下载所有内容后才设置部分信息。然而,我显然没有考虑到一些事情,因为 NSFRC 似乎在彼此之上创建重复的单元格。我可以说出来,因为在几个单元格上有一个半透明的背景,由于重叠而变得加倍强烈。它们似乎来去匆匆,具体取决于您在 TableView 中的位置,并且会导致多个故障。我显然在某处错误地使用了 NSFRC,但我只是不知道在哪里。
如果您能帮我诊断这个问题,我将不胜感激。
问候,
迈克
更新:认为我刚刚发现了一个潜在的原因。在viewDidAppear
我设置每个实体的部分。似乎每次我保存实体 NSFRC 都会重新创建屏幕上的行。这是一个正确的推论吗?
更新 2似乎还有更多的东西。NSFRC 甚至无法识别最后 6 个单元格,即使它们已显示。当我按下编辑时,除了最后 6 个之外,所有应用程序都向右移动(它们应该如此)。有一大堆奇怪的行为正在发生。我的 NSLog inwillDisplayCell
似乎持续了很多次,即使 TableView 没有滚动。
更新 3好的,所以我设置 Section 的代码绝对是问题所在。刚刚注释掉了所有它,它工作正常。以下是我为每个实体设置部分的方式:
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 进入超速状态并导致多个故障。