更新单元格后UITableView渲染严重

时间:2011-08-24 04:22:54

标签: uitableview core-data rendering

在我的应用程序中,我有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 :(得分:0)

这似乎不是核心数据的问题。

尝试拨打

 [cell.backgroundView setNeedsDisplay]; 

以更新单元格。如果它不起作用,请尝试在setNeedsDisplay上调用tableView

答案 1 :(得分:0)

很可能你遇到了问题:

tableView:cellForRowAtIndexPath:

...您为索引零提供了错误类型或大小的单元格。