应用程序UI在某些时候没有响应,然后恢复UIScrollView的正常运行和问题

时间:2011-02-10 10:17:20

标签: iphone objective-c nsurlconnection

我将尝试用简单的词语来叙述问题。我是iOS的编程新手。 我正在开发一个从服务器获取基于xml的响应的应用程序。该应用程序由4个选项卡组成,它们触发不同的请求,所有响应都是基于xml的。

问题情景: 假设我按下第一个选项卡,它发送第一组数据的请求。在正常情况下,我解析响应并将其显示在屏幕上。屏幕由UIScrollView和i添加子视图组成,使其看起来像图像的网格视图。我在创建网格视图时请求图像。图像的网址是响应的一部分。同样,这是一个异步请求,并根据索引更新网格视图。如果我在整个更新过程中没有按任何其他选项卡,它工作正常。假设我按下一个不同的选项卡,然后它也会触发对服务器的请求。

我正在为每次获取发送异步请求,并将重定位存储在我的数据模型中,这基本上是一个单例。因此,当我填充视图时,我可以访问视图控制器中的所有响应。

从服务器检索第一个选项卡内容并按下另一个选项卡时出现问题。 我想停止下载从第一个标签按下启动的图像/响应。我的模型能够保存收到的数据,包括图像,并在第一次没有下载时触发​​新的图像请求。

在此过程中,UI变得完全没有响应。我不希望没有反应迟钝的用户界面。

  1. 如何在不必同时下载内容的情况下有效地执行此操作?
  2. 有没有更好的方法来实现这一目标?
  3. PS:如果需要剥离不需要的详细信息,我会粘贴代码,但如果您知道发送请求和处理它们的好方法,而不会使UI无响应,那将会很有帮助。 编辑:

    我创建了100个子视图并将其添加到滚动视图中。在这段时间里,我不能滚动,因此它给人一种悬挂的感觉。如何更新UIscroll视图而不必在响应性方面做出妥协?

1 个答案:

答案 0 :(得分:1)

我正在编写一个应用程序,它大量使用Web服务来提供要在屏幕上显示的数据。我在NSOperation中下载所有内容,该NSOperation在单个“数据管理器”类的NSOperationQueue中运行。下载完成后,NSOperation对数据管理器单例执行“performSelectorOnMainThread”,数据管理器存储新数据,并发布具有新数据的NSNotification。任何关心该特定管理器中的数据更新的UIViewController都会注册该更新通知。

通过这种结构,应用程序UI运行非常流畅,没有打嗝或停顿。

使用相同类型的组织,可以非常轻松地创建一个“LazyUIImageView”类,该类可以在NSOperation中下载其图像(并且可以在等待图像下载完成时显示活动指示符)。带有LazyUIImageView的表格可以平滑滚动,当图像数据最终到达时,图像只是“弹出”即可查看。