_fetchedResultsController objectAtIndexPath:indexPath冻结app

时间:2015-05-18 11:25:41

标签: ios core-data nsfetchedresultscontroller

[_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];

}

2 个答案:

答案 0 :(得分:0)

你有没有运行仪器?运行Time Profiler。什么是占用时间?找到并消除它。

如果找不到,请在此处发布跟踪以供其他人查看。

答案 1 :(得分:0)

另一种方法是使用自我调整细胞。您不必计算(或缓存)任何行高。

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

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

  3. 有关详细信息,请参阅smileyborganswer在UITableView中使用自动布局进行动态单元格布局的详细演练。可变行高