UITableView плохо рендерится после обновления ячеек - PullRequest
0 голосов
/ 24 августа 2011

В моем приложении у меня есть 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 выполняется в главном потоке - поэтому обновления также производятся из основного потока.

Ответы [ 2 ]

0 голосов
/ 24 августа 2011

Скорее всего, у вас проблема в:

tableView:cellForRowAtIndexPath:

… где вы предоставляете ячейку неправильного типа или размера для нулевого индекса.

0 голосов
/ 24 августа 2011

Похоже, что это не проблема с основными данными.

Попробуйте позвонить

 [cell.backgroundView setNeedsDisplay]; 

, чтобы обновить ячейку.Если это не работает, попробуйте позвонить setNeedsDisplay на tableView.

...