2010-10-25 121 views
0

我正在向Web服务发出同步请求,并且无法显示加载...警报。由于我无法在同步请求时访问UI。iPhone同步请求

你可以请任何人指导我显示活动指标,我正在做同步请求。

如果在后台线程中运行同步请求,是否可以显示加载消息。

问候, Malleswar

回答

1

是的,有可能这样做。

你不应该像你所描述的那样用UI阻止应用程序的主线程 - 在你的设计中总是考虑这个。

有几种方法可以实现这一点。 NSOperation是一个很好的起点。因此您将创建一个NSOperation子类,它将执行请求,然后通知请求已完成的内容,并提供准备好的数据。

1)启动进度指示器

2)增加操作的

3)停止指示灯一旦(的NSOperation到控制器)的交易已完成。提示:使用操作中的performSelectorOnMainThread:…

+0

感谢您的详细描述。你能否提供一些代码或样本下载来实现这一点。 – user304804 2010-10-25 06:34:53

+0

你可以不需要继承NSOperation。只需使用'performSelectorInBackground'。这会自动产生一个新的线程。 – Rengers 2010-10-25 07:30:19

+0

是的,还有其他选择。 'performSelectorInBackground:'在SLOC中通常是轻量级的,但是在性能上非常重要(与NSOperations相比)。我发现NSOperations也是组织和重用目的的一个很好的起点,但情况可能会有所不同。如果您试图处理潜在的失败,那么Web服务请求相当复杂 - 因此它是一个可靠的,结构化的,可重用的实现的好候选,其实际参数和调用可能会被操作包含。这就是为什么我建议。 – justin 2010-11-01 22:26:57

0

我会建议运行在后台线程的请求。我总是使用ASIHTTPRequest库来进行异步请求。在回调方法中,您可以将代码切换到加载警报可见性。

+0

感谢您的快速回复。但我已经开始使用NSData * data = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error];(它在不同的类方法中),并直接从UIthread调用此方法。我现在不能改变。您可以请指导我在后台线程中调用该方法,并在请求运行时显示活动指示器。 – user304804 2010-10-25 05:35:49