【问题标题】:SQLite SELECT and UITableViewSQLite SELECT 和 UITableView
【发布时间】:2012-02-13 15:43:39
【问题描述】:

我需要在 UITableView 上显示 sqlite 表中的所有值。该表有 100 000 行。一切正常,只是数据出现需要将近 5 秒。我知道这是由于行数过多而发生的。因此,我决定每 10 000 行重新加载表视图。对于每 10 000 行,方法

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

被调用并返回正确的值,但cellForRowAtIndexPath 不会被调用,除非在完整选择结束时 (100 000)。我目前正在主线程上执行 sql 查询。这就是表格视图没有更新的原因还是我遗漏了什么?

【问题讨论】:

    标签: ios performance sqlite select


    【解决方案1】:

    如果您在表有机会加载之前获取数据库,是的,拆分它不会改变任何东西。并且主线程是 UI 线程,所以用长 sql fetching 阻塞它会延迟你的 table view 的加载。

    您无需拥有 100 000 行即可在屏幕上最多显示 10 - 20 行。

    为什么不只获取numberOfRowsInSection 中的计数并获取 cellForRowAtIndexPath(或更少)中的 1000 个元素,这个想法是尽可能快地获取您需要显示的内容,然后获取其余部分根据需要您的数据。 就像如果这个人正在滚动并且你有 1000 行并且这个人滚动到第 700 行,那可能是时候获取另外 1000 行了。
    根据您的应用程序正在做什么以及需要多久进行一次滚动,这可能是一种方法。

    【讨论】:

    • 问题是我有部分。您是在建议我只获取每个部分的前 n 行,对吗?假设用户在字母 A 处,它点击字母 Z。然后他向上滚动,他将在字母 Y 处。这些单元格的数据尚不可用。
    • @adriana 我建议:首先获得您需要显示的内容+一点喘息的空间,这样您就可以尽快向用户展示一些内容,然后根据需要获取其余内容或一下子。
    猜你喜欢
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多