我有两个tableviews,其中一个导航到下一个。两者都使用或多或少相同的代码,并使用managedObjectContext和FetchedResultsController设计模式为两个表提供相关数据。
当我从第一个表视图导航到第二个表视图并且数据源在tableview中只显示一个Section Header / Row时,我的问题就出现了。我发现数据源不会更新Section Header信息。但是,如果第二个tableview中传递了多个行或节数据,它将更新此信息。
当尝试第二次从第一个表视图的不同行导航相同的数据标准时,此问题才真正引人注目。不知何故,它没有从第一次尝试中释放信息,而是将此信息用作占位符。我可以确认已完成内存管理方法,并且Section Header下面的相应Row正在使用正确的数据,因此我的managedObjectModel正在正确传递。
还有其他人遇到过这个问题吗?
更新
这是第一个tableview中使用的代码。
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
if ([fetchSectioningControl selectedSegmentIndex] == 2) {
return [NSString stringWithFormat:NSLocalizedString(@"%@ - %d events", @"%@ - %d events"), [sectionInfo name], [sectionInfo numberOfObjects]];
} else if ([fetchSectioningControl selectedSegmentIndex] == 1) {
return [NSString stringWithFormat:NSLocalizedString(@"%@ - %d events", @"%@ - %d events"), [sectionInfo name], [sectionInfo numberOfObjects]];
} else {
NSString *dates = [self.dateFormatter stringFromDate:date];
NSString *compareDate = [sectionInfo name];
if ([dates isEqualToString:compareDate]) {
return [NSString stringWithFormat:@"Today"];
}else {
return [sectionInfo name];
}
}
}
这是第二个tableview中使用的代码
- (NSString *)tableView:(UITableView *)table titleForHeaderInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
NSString *dates = [self.dateFormatter stringFromDate:date];
NSString *compareDate = [sectionInfo name];
if ([dates isEqualToString:compareDate]) {
return [NSString stringWithFormat:@"Today"];
}else {
return [sectionInfo name];
}
}
答案 0 :(得分:0)
我通过在我的FetchedResultsController的initWithFetchedRequest方法中为cacheName提供nil值来解决了这个问题。另一个建议是在使用以下方法实例化NSFetchedResultsController之前删除缓存:
+ (void)deleteCacheWithName:(NSString *)name;
对于here发布的答案,此答案的所有功劳必须转至“不可原谅”。