【问题标题】:Most efficient way to handle variably sized UITableView Cells, and retrieve associated data efficiently处理可变大小的 UITableView 单元格并有效检索关联数据的最有效方法
【发布时间】:2011-06-06 10:14:19
【问题描述】:

大家好,非常感谢您的帮助 - 我的目标是提高数据获取和内存使用的效率。

我有一个核心数据存储,存储目录项(tocEntity):文章标题、页码。一个页面可以有多篇文章,并且页码可以存在或不存在,即如果您有一篇从第 3 页开始的 5 页文章,您将没有任何 t.o.c.第 4-7 页的条目。

当我在表格视图中显示上述内容时,每个单元格都会显示一个页面的所有文章名称,因此某些单元格将有一个文章名称,而其他单元格可能有 10 个(或更多)

让单元格布置得很好没有问题,但我有兴趣只为表格视图当前需要的数据有效地获取数据(NSFetchedResultsController 的工作方式) - 问题是,每个单元格没有 1 个核心数据条目,而是数量不等。因此,如果 NSFetvhedResultsController 会说(让我获取单元格 12-17 的数据) - 这不会导致单核数据检索。

任何想法如何去实现这个?

【问题讨论】:

    标签: objective-c uitableview core-data nsfetchedresultscontroller


    【解决方案1】:

    viewDidLoad 中将所有数据检索到NSArray 中,然后在UITableView DataSource 方法中使用此数组,而不是实时调用。如果要刷新数据,请从数据中重新填充数组并在 tableview 上调用 reloadData

    【讨论】:

    • 这就是我的做法,但它根本不是一种节省内存的解决方案,而且不可扩展——可能只有总数据的 1% 可以显示在屏幕上1次...
    • 不幸的是,苹果代码的工作方式(如您所见)是它在渲染时多次调用相同的方法。您唯一能做的就是限制行数,然后检测滚动并在表中插入行等,但我不推荐这样做。
    • 还值得指出的是 CoreData 有问题,这意味着即使您将核心数据对象放在一个数组中,当您访问一个属性时,您并没有在内存中保存整个对象图它出错的对象导致 CoreData 获取该数据,它非常有效。
    【解决方案2】:

    如果可能,我建议将所有这些链接分组到一个表格视图部分,而不是将它们分组在一个表格视图行中。这是因为可变高度单元格会降低滚动性能。

    【讨论】:

    • 我考虑过这个 - 但它会导致一个包含许多单单元格部分的表格(比多行部分更常见),这看起来很笨拙?有没有办法让每个部分与前一个部分连接起来,即各部分之间没有间隙?
    • 我不清楚你所指的差距在哪里。如果部分有问题,您可以尝试使用未缩进的行来表示页面,然后使用缩进的行来表示页面链接。
    • 您是否遍历整个结果数组以按页面对文章名称进行分组?如果是这样,则数组中的每个对象在访问其属性时都会出错。为了提高性能,您需要确定一种方法来返回已排序和分组以供显示的实体。关于部分,您还可以返回表格部分的自定义视图,其中可以包括显示三角形等。
    猜你喜欢
    • 1970-01-01
    • 2016-06-06
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    相关资源
    最近更新 更多