У меня есть 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);
После обновления контекста: неправдоподобным город свойство равно нулю (я думаю, это потому, что по-прежнему указывает на старой записи города, который был удален), но Если я делаю выбор вручную, я получаю свежие данные.
Не работает. Я отредактировал свой ответ. – user1897723
Пожалуйста, не стесняйтесь задавать мне вопросы – user1897723
Запрос на выборку в ячейке конфигурации почти наверняка ошибочен. Вы должны использовать объект, возвращенный вашим выбранным контроллером результатов. – Mundi