1

我有一个tableview,并使用NSFetchedResultsController将其链接到核心数据。我有一个方法updateCellAtIndexPath,我正在使用它来更新单元格文本标签。我从tableView:cellForRowAtIndexPath:indexPath调用此方法。这工作正常。NSFetchedResultsChangeUpdate后更新单元格内的值

-(UITableViewCell *)updateCellAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"TripCell"; 
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];  
    Trip *trip = [_controller objectAtIndexPath:indexPath];  
    cell.textLabel.text= [NSString stringWithFormat:@"%@" ,trip.name ];   
    return cell; 
} 

当我更新的核心数据对象,我收到NSFetchedResultsChangeUpdate和我打电话updateCellAtIndexPath。问题在于单元格文本标签未正确更新为实际值。我认为电池不重装,因为一切正常,如果我改变updateCellAtIndexPathreloadRowsAtIndexPaths:withRowAnimation:

-(void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath 
{ 
    switch (type){ 
     case NSFetchedResultsChangeUpdate: 
      // works [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; 
      // not works [self updateCellAtIndexPath:indexPath]; 
      break; 
     default: 
      break; 
    } 
} 

但是,当我阅读文档reloadRowsAtIndexPaths:withRowAnimation:,它说,如果我想只是为了更新值我不应该使用这个方法:

如果要提醒用户单元格的值正在更改,请调用此方法。但是,如果通知用户不是 重要的 - 也就是说,您只想更改单元格显示的值 - 您可以获取特定行的单元格并设置其新的 值。

为什么我不能使用updateCellAtIndexPath更新单元格文本标签?

回答

1

您的updateCellAtIndexPath:方法创建新的单元格而不是更新现有的单元格。 如果从cellForRowAtIndexPath中调用,但没有从FRC 委托方法中调用,那么也可以。

如果实现,并使用“标准”

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath 

,你可以找到如它应该工作当在Xcode中使用(Master-Detail + Core Data) 模板创建新应用程序时。

+0

你好马丁,我有一个单元,它是用不同的XIB和类创建的,它们都继承了具有子类单元的基类MessageCell作为传入,传出,媒体,音频,位置单元的消息单元。 –

相关问题