_fetchedResultsController objectAtIndexPath:indexPath 冻结应用程序

_fetchedResultsController objectAtIndexPath:indexPath freezes app

[_fetchedResultsController objectAtIndexPath:indexPath]上花费的时间太长了,有没有其他方法? heightForRowAtIndexPath 在这一点上花费了太多时间。我不知道这是不是错误的问题,但请帮助我找到正确的解决方案。

   - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath   *)indexPath
 {
    ThreadInfo *info=[_fetchedResultsController objectAtIndexPath:indexPath];
    NSString* objectId = info.threadID;
    if (![self.idToCellHeight objectForKey: objectId])
    {
        CGFloat height = [self calculateHeightForId:info];
        [self.idToCellHeight setObject:[NSNumber numberWithFloat:height] forKey: objectId];
    }
    return [[self.idToCellHeight objectForKey:objectId] floatValue];

}

你有运行乐器吗? 运行 时间分析器。什么占用了时间?找到它并消除它。

如果找不到,post这里的踪迹给别人看看

另一种方法是使用自动调整大小的单元格。您不必计算(或缓存)任何行高。

  1. 向 tableViewCell 的子视图添加自动布局约束,这将导致单元格根据子视图的内容调整其高度。
  2. 启用行高估计。

    self.tableView.rowHeight = UITableViewAutomaticDimension; self.tableView.estimatedRowHeight = 44.0;

有关详细信息,请参阅 smileyborg in his answerUsing Auto Layout in UITableView for dynamic cell layouts & variable row heights 的详细演练。