2013-04-17 19 views
0

У меня есть 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); 

После обновления контекста: неправдоподобным город свойство равно нулю (я думаю, это потому, что по-прежнему указывает на старой записи города, который был удален), но Если я делаю выбор вручную, я получаю свежие данные.

ответ

1

Просто позвоните в свое выбранное свойство, где вы сконфигурируете свою ячейку.

[managedObject fetchedPropertyAttribute]; 

Он должен пересчитать, как ожидалось.

Кроме того, рассмотрите возможность использования отношений, а не изъятого имущества.

+0

Не работает. Я отредактировал свой ответ. – user1897723

+0

Пожалуйста, не стесняйтесь задавать мне вопросы – user1897723

+0

Запрос на выборку в ячейке конфигурации почти наверняка ошибочен. Вы должны использовать объект, возвращенный вашим выбранным контроллером результатов. – Mundi

Смежные вопросы