使用NSFetchedResultsController的可变高度?

时间:2009-09-28 18:14:06

标签: iphone objective-c core-data

设计/使用我的模型和NSFetchedResultsController的最佳方法是什么,以便我可以使用具有可变高度单元格的表?计算高度是昂贵的(并且需要访问模型的数据)所以我正在缓存我的模型中的值。但是,我知道tableview将要求所有可见细胞的高度。

我目前的想法是,我将限制结果的数量,并允许用户自己获取更大的数字,以防止过多的负载。

然而,我担心的是我的行包含每个相关数据大约200个字节。错误的200行只会占用大约20k,但如果我希望显示20000怎么办呢?我只会设置2 MB的原始数据来设置单元格高度。

有一个属性占据了大约90%的数据。这意味着我可以将主实体保持在每行20个字节。将它保存在一个单独的实体中是否值得,以便我可以避免在不需要的情况下将其发生故障?

最后一点:细胞高度完全是动态的,取决于内容。如果只有几个可能的选择,这将更加简单。

2 个答案:

答案 0 :(得分:0)

如果您可以根据您注入单元格的内容枚举单元格类型,并将单元格类型存储在数据模型中,则可以执行switch - case树来返回标准,每个单元格预先计算的高度。

答案 1 :(得分:0)

值得庆幸的是,从iPhone SDK 3.1开始,我们可以跟踪Core Data使用的sql调用。事实证明,对于少量数据(如每个单元200字节),如果将所有数据保存在同一个实体中,性能要好得多。对于上面的例子(有20000个)单元,Core Data可以很好地执行2000个额外的请求来获取它需要的数据,并且获取请求开销变得很麻烦。在那个阶段,最好使用批处理来加快速度。