2010-01-20 49 views
4

我有一个iPhone应用程序,它使用ASIHTTPRequest与我的服务器上的REST服务进行通信。当我在模拟器上运行时,它工作得很好,但是当我接触到手机本身时,会出现奇怪的行为。ASIHTTPRequest同步

第一次点击启动请求的按钮,我立即得到结果,一切正常。从那时起,当我点击按钮启动连接时,连接大约需要2-3分钟。它几乎看起来像我首先启动的(并且我已经从中收到正确结果的)ASIHTTPRequest尚未完成。在开始下一个之前,是否需要使用某种魔法来终止原始请求?我认为,既然-start方法返回,并且我有服务器的结果,原始请求已完成,我可以启动另一个。

任何想法?

感谢

--Steve

回答

2

你不是想调用-start方法,它属于的NSOperation。 ASIHTTPRequest接口是-startSynchronous或-startAsynchronous。

但是,强烈建议使用异步调用,否则,主线程(即UI)将被阻止。

从ASIHTTPRequest文档[1]

通常,应该使用优先 异步请求 同步请求。当您从 主线程同步使用 ASIHTTPRequest时,您的应用程序的用户 接口将锁定,并在 请求的持续时间内变为 不可用。同步请求只 真正适合的软件没有 UI(如从 端运行的脚本),或者如果你是从一个单独的线程运行 请求 你维护(可能是从你 自己的NSOperation内,例如)。

[1] http://allseeing-i.com/ASIHTTPRequest/How-to-use

+0

我在12月下载的ASIHTTPRequest的版本没有startSynchronous方法,只有-start方法。 我已经下载了最新版本的ASIHTTPRequest,并更改了使用startSynchronous的代码,但效果是一样的。 – Steve 2010-01-20 01:37:53

+0

切换到startAsynchronous没有帮助。第一次呼叫通过后,每次后续呼叫均会失败,并显示“发生连接失败”。基础错误是超时。 – Steve 2010-01-20 02:11:50

+0

我已经更改了代码,以便每个ASIHTTPRequest在单独的队列上运行。现在它大约有50%的时间工作,剩下的时间就会超时。 这变得令人沮丧。我应该放弃ASIHTTPRequest的电话并返回NSURLConnection来完成这项工作吗? – Steve 2010-01-20 02:56:02

6

史蒂夫 - 你所描述什么是,如果请求试图保持一个持久连接,将出现一个普遍的问题。试试这个:

[request setShouldAttemptPersistentConnection:NO];