1

我有一个表格视图,我需要在其中显示大约 10,000 行(数据本地存储在 sqlite 中)

但是当我们跳转到该视图时,应用程序在加载所有这些行时被阻塞(冻结)。

有没有在不冻结 UI 的情况下加载数据?

PS。我们的app被拒绝了,是不是这个原因?

谢谢

编辑:他们拒绝并给出以下信息“你好。

我们注意到您的应用缺少原生 iOS 功能。

请查看视频以获取应用程序设计信息:“入门视频:出色 iPhone 应用程序的成分”和“iPhone 用户界面设计”,可在 iOS 开发人员中心http://developer.apple.com/devcenter/ios,尤其是 iOS 人机界面指南http://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/MobileHIG.pdf,“伟大的 iOS 应用程序拥抱平台和 HI 设计原则”部分http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/MobileHIG/Introduction/Introduction.html和“人机界面原理”http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/MobileHIG/Principles/Principles.html%23//apple_ref/doc/uid/TP40006556-CH5-SW1。”

4

2 回答 2

1

对于一万行,您别无选择,只能按需加载数据。否则,您的应用程序就没有机会达到不错的水平。像您描述的冻结肯定足以看到您的应用被拒绝1

这种方法在内存方面也相当浪费,因为在一万行中,您在任何给定时间最多需要两打。

一个相当简单的加快速度的方法是NSCache为您的数据页准备一个(例如,每页十个项目),添加获取记录总数的代码,并修改检索数据的代码以从单个读取记录页(使用LIMIT/OFFSET)。当您的表显示行时,它应该尝试从缓存中获取该行的一页。如果页面不存在,它应该从 sqlite 加载它,并放入缓存中。使用页面将最小化到数据库的往返次数;使用缓存将让您管理内存的最佳使用。


1这一次看起来您的应用程序没有因为冻结而被拒绝,但是一旦您修复了“缺少本机 iOS 功能”,冻结将触发另一个拒绝。

于 2012-09-01T11:54:11.723 回答
0

检查演示以延迟加载所有数据以及图像。

此示例演示了加载和显示 UITableView 的多阶段方法。它首先从 RSS 提要加载相关文本,以便尽快加载表格,然后异步下载每一行的图像,以便 UI 响应更快。

于 2012-09-01T11:54:25.647 回答