我有一个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
。问题在于单元格文本标签未正确更新为实际值。我认为电池不重装,因为一切正常,如果我改变updateCellAtIndexPath
到reloadRowsAtIndexPaths: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
更新单元格文本标签?
你好马丁,我有一个单元,它是用不同的XIB和类创建的,它们都继承了具有子类单元的基类MessageCell作为传入,传出,媒体,音频,位置单元的消息单元。 –