【发布时间】:2013-06-30 15:14:21
【问题描述】:
正如Apple Doc所说,
重新加载行会导致表视图向其数据源请求新的 该行的单元格。
我将 UITableView 与 NSFetchedResultsController 结合起来:
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
{
if (self.tableView.isEditing)
{
[self.tableView setEditing:NO animated:YES];
}
[self.tableView beginUpdates];
}
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[self.tableView endUpdates];
[self updateTabItemBadge];
[self.noDataView setHidden:![self isNoData]];
WXINFO(@"controllerDidChangeContent");
}
在上述两个函数之间,我重新加载了目标单元格:
case NSFetchedResultsChangeUpdate: {
if (indexPath) {
[tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
}
我在 Line1563 处设置了一个断点,以检查 reloadRowsAtIndexPaths 是否已被调用,但之后,- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 没有被调用。
所以,我的单元格无法更新。
谁能告诉我为什么?谢谢。
【问题讨论】:
-
重新加载目标单元格?那是我从未听说过的事情。甚至在 Visual Basic 中也没有...
-
你调用
reloadRowsAtIndexPaths:withRowAnimation:的方法是controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:? -
@leoformaggio 是的,当然。
-
@TBlue 目标单元格是 indexPath 处的单元格。
-
可能有点傻,但是tableView其实指向的是目标tableView?将
NSAssert(tableView, @"No Tableview!");放入NSFetchedResultsChangeUpdate:外壳内以确保。
标签: iphone ios objective-c uitableview core-data