В моем приложении у меня есть UITableView, и данные таблицы могут обновляться с удаленного компьютера после запроса пользователя. Я использую Core Data и NSFetchedResultsController, и когда изменения произошли, -controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
вызывается:
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath
{
switch(type)
{
case NSFetchedResultsChangeInsert:
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeDelete:
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
case NSFetchedResultsChangeUpdate:
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationNone];
break;
case NSFetchedResultsChangeMove:
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
}
}
Все работает правильно, кроме одного. Иногда после перезагрузки первого ряда он отображается без рамки (граница внезапно исчезает). Что может быть не так?
P.S .: Для обновления данных я создаю новый NSManagedObjectContext
в фоновом режиме и управляю NSManagedObjectContextDidSaveNotification
. Когда приходит уведомление, mergeChangesFromContextDidSaveNotification
выполняется в главном потоке - поэтому обновления также производятся из основного потока.