【问题标题】:ASIHTTPRequest synchronouslyASIHTTPRequest 同步
【发布时间】:2010-01-20 00:59:53
【问题描述】:

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

第一次单击发起请求的按钮时,我立即返回结果,一切都很好。从那时起,当我单击按钮启动连接时,连接大约需要 2-3 分钟。似乎我首先启动的 ASIHTTPRequest(并且我已经收到了正确的结果)还没有完成。在开始下一个请求之前,我需要使用某种魔法来终止原始请求吗?我假设自从 -start 方法返回,并且我从服务器得到原始请求已完成的结果,我可以开始另一个。

有什么想法吗?

谢谢

--史蒂夫

【问题讨论】:

    标签: iphone asihttprequest


    【解决方案1】:

    Steve - 您所描述的是一个常见问题,如果请求试图保持持久连接,就会出现这种问题。试试这个:

    [request setShouldAttemptPersistentConnection:NO];
    

    【讨论】:

      【解决方案2】:

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

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

      来自 ASIHTTPRequest 文档[1]

      一般来说,你应该使用 异步请求优先于 同步请求。当你使用 ASIHTTPRequest 同步地从 主线程,您的应用程序的用户 界面将锁定并成为 期间无法使用 要求。同步请求仅 真的很适合没有a的软件 UI(就像从 终端),或者如果您正在运行 来自单独线程的请求 你维护(也许从你的内部 自己的 NSOperation,例如)。

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

      【讨论】:

      • 我去年12月下载的ASIHTTPRequest版本没有startSynchronous方法,只有-start方法。我已经下载了最新版本的ASIHTTPRequest,改代码使用startSynchronous,但是效果是一样的。
      • 切换到 startAsynchronous 没有帮助。第一个呼叫通过,随后的每个呼叫都失败并显示“发生连接失败”。根本错误是超时。
      • 我已经更改了代码,以便每个 ASIHTTPRequest 在单独的队列上运行。现在它大约有 50% 的时间工作,其余时间它超时。这变得令人沮丧。我应该放弃电话的 ASIHTTPRequest 并返回 NSURLConnection 来完成这项工作吗?
      • 你为什么不把 ASIHTTPRequest 的 timeOutSeconds 设置得更长一点?
      • 我遇到此问题的另一个原因是我的手机无法访问我的测试服务器localhost/nameOfMyServer。所以我不得不转到设置> Wifi > MyNetwork > ManualProxy > 我桌面的IP,然后尝试
      猜你喜欢
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多