我注意到如果存在连接问题,那么除了didFailWithError之外,还会调用didReceiveResponse :(使用HTTP 400)。
这不是我所期待的,并且使处理错误情况变得棘手 - 特别是因为我也注意到didReceiveResponse:在didFailWithError之前调用的东西:有时在它之后调用。
我无法相信这是预期的行为,因此我想知道我的代码是否存在某些问题,但如果有,我无法想象如何。
任何人都可以确认NSURLConnection的行为应该是什么,或者他们之前是否看到过这样的行为?
答案 0 :(得分:3)
非常确定这是按预期工作的。 -connectionDidFinishLoading:
和connection:didFailWithError:
方法是互斥的,但任何一种方法都可以通过调用(或许多!)继续进行connection:didReceiveResponse:
。
毕竟,在这种情况下, 会收到有效的HTTP响应。它恰好是一个表明由于该请求存在某些问题而无法处理您的请求的情况。 (相反,例如,超时,加载失败,但从来没有响应。)
但是,-connectionDidFinishLoading:
或connection:didFailWithError:
中的一个应始终是您为给定连接获得的 last 消息。 (如果您在许多连接中使用单个委托,请确保在看到这些调用无序时查看相同的连接对象。)