我有UITableView和NSFetchedResultsController以及附加到它的主要上下文。 我正在从背景更新我的主要背景。
- (void)contextDidSave:(NSNotification *)notification
{
NSManagedObjectContext *context=[self managedObjectContext];
[context performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) withObject:notification waitUntilDone:YES];
if ([context hasChanges])
{
[context performSelectorOnMainThread:@selector(save:) withObject:nil waitUntilDone:YES];
}
}
我的UITableView重新加载了新数据,一切都很好,但是某些UITableView单元格的数据必须从获取的属性中填充,我需要刷新这些值。
我已经阅读了NSManagedObjectContext的方法refreshObject:mergeChanges:这可能会有所帮助。我应该把它放在哪里?如果我将它放在cellForRowAtIndexPath的辅助方法 - configureCell:atIndexPath:这将导致循环行更新。
以下是单元格配置代码:
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)theIndexPath
{
//NSLog(@"PTAgencyList: configureCell: atIndexPath: %i %i", theIndexPath.section, theIndexPath.row);
NSManagedObject *managedObj=[self.agenciesFetchedResultsController objectAtIndexPath:theIndexPath];
if (managedObj==nil)
{
NSLog(@"PANIC: fetchedResultsController objectAtIndexPath: returned nil object");
return;
}
else
{
CDAgency *agency=(CDAgency *)managedObj;
[agency city];
NSLog(@"agency.city_server_id: %@", agency.city_server_id);
NSLog(@"agency.city.name: %@", ((CDCities *)[[agency city] objectAtIndex:0]).name);
NSFetchRequest *fr=[[NSFetchRequest alloc] init];
[fr setEntity:[NSEntityDescription entityForName:@"Cities" inManagedObjectContext:self.context]];
[fr setPredicate:[NSPredicate predicateWithFormat:@"server_id=%@", agency.city_server_id]];
NSArray *res=[self.context executeFetchRequest:fr error:nil];
NSLog(@"fetched city name: %@", ((CDCities *)[res objectAtIndex:0]).name);
上下文更新后: 获取属性city是nil(我认为这是因为它仍然指向已删除的旧城区条目),但是如果我正在手动获取我正在获取新数据。
答案 0 :(得分:1)
只需在配置单元格的位置明确调用已获取的属性。
[managedObject fetchedPropertyAttribute];
它应该按预期重新计算。
另外,请考虑使用关系而不是fetched属性。