【问题标题】:Message users while large table loads加载大型表时向用户发送消息
【发布时间】:2011-05-20 16:11:07
【问题描述】:
我正在处理几个大型 RSS 提要并在 TableView 中显示结果。处理在用户单击相关选项卡后开始。一切正常,但由于处理需要几秒钟,NIB 和表格在处理完成之前不会加载,看起来 iPhone 已经卡住了。我在 NIB 中添加了一个 Activity 指示器,但是因为它在表格准备好显示之前不会加载,所以它看起来太晚了,没有任何用处。
有没有人知道如何在表格构建/加载时向用户显示消息?我曾尝试先加载 UIView 并将表格添加为子视图,但同样,两者似乎都仅在表格准备好后才加载。
感谢指导。
【问题讨论】:
标签:
iphone
uitableview
sdk
rss
【解决方案1】:
从您的描述中很难猜出发生了什么,但看起来您的调用不是异步的。以下是您应该在代码中执行的操作:
使所有调用异步。你说你的手机卡住了。听起来您的请求和响应正在主线程上发生。您可以使用许多库来处理异步调用。 ASIHTTPRequest 举个例子....
在显示 tableView 之前不要等待数据进来。这是一个设计原则,您尽可能多地加载 UI,以便用户在后台加载数据时可以查看一些内容。你应该做的是初始化一个 NSMutableArray 来保存数据。最初,此数组将不包含任何对象。这是您在数据源方法中使用的数组:使用numberOfRowsInSection 的数组大小并使用cellForRowAtIndexPath 中的数组对象。一旦您的 RSS 提要 XML 进入并被解析,请将其存储在您的数组中并调用 [tableView reloadData]。这样您就不会让您的用户看到一个空白屏幕。 (另一个好的做法是当数组大小为零时,在表格视图中显示一个显示“数据正在加载”或其他内容的单元格。
当您第一次初始化并加载表格,然后触发这些 RSS 提要请求时,您会在 tableView 上显示活动指示器视图。当 RSS 数据进入并且您的 tableView 重新加载时,停止为指示器设置动画。
这些是在表格视图中显示非本地数据时应遵循的标准步骤。带来流畅的用户体验。
就像我之前说的,从您的问题看来,您的调用不是异步的。如果我错了,请纠正我,让我们从那里开始......