我正在处理几个大型RSS源并在TableView中显示结果。用户单击相关选项卡后,处理开始。一切运行良好,但由于处理需要几秒钟,NIB和Table不会加载,直到处理完成,看起来iPhone已经占用了。我已经在NIB中添加了一个活动指示器,但由于它在表准备好显示之前没有加载,所以它似乎为时已晚,无法使用。
有没有人有任何想法如何在表格构建/加载时向用户显示消息?我已经尝试首先加载UIView并将表添加为子视图,但同样,两者似乎只在表准备就绪后加载。
指导赞赏。
答案 0 :(得分:1)
很难猜出你的描述中发生了什么,但看起来你的调用不是异步的。以下是您在代码中应该做的事情:
使所有调用异步。你说你的手机正在搞砸。听起来好像你的请求和响应正在主线程上发生。您可以使用许多库来处理异步调用。 ASIHTTPRequest举个例子......
在显示tableView之前,不要等待数据进入。这是一个设计原则,您可以尽可能多地加载UI,以便用户在后台加载数据时可以查看。你应该做的是初始化一个NSMutableArray来保存数据。最初,此数组不包含任何对象。这是您在数据源方法中使用的数组:使用numberOfRowsInSection
的数组大小并使用cellForRowAtIndexPath
中的数组对象。一旦您的RSS提要XML进入并进行了解析,请将其存储在数组中并调用[tableView reloadData]
。这样您就不会让用户看到空白屏幕。 (另一个好的做法是,当数组大小为零时,在tableview中显示一个单元格,显示“数据正在加载”或其他内容)。
当您首次初始化并加载表然后触发这些RSS提要请求时,就会在tableView上显示活动指示器视图。当RSS数据进入并且tableView重新加载时,停止动画指示器。
这些是在tableview中显示非本地数据时应遵循的标准步骤。实现流畅的用户体验。
就像我之前说过的那样,从您的问题看来,您的通话并非异步。如果我错了,请纠正我,让我们从那里拿走它......