Handling a NSURLRequest with timeout when using delegate

大城市里の小女人 提交于 2019-12-04 18:11:30

问题


I'm using a NSMutableURLRequest to connect to a web site to get a JSON response. I'm doing so by generating the request, and then using NSURLConnection with a delegate of self to handle the async connection. I've implemented all the normal delegate methods:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- (void)connectionDidFinishLoading:(NSURLConnection *)connection

All works perfectly with getting data back, dealing with any errors that occur, etc. However with the timeout on the NSURLRequest set to 10 seconds I don't seem to get called in those methods (I expected the didFailWithError to get called). It just sits there forever and I have no notification that it timed out.

Reading the iPhone API docs I don't see any mention of what should happen when the timeout occurs, just that you can set the timeout value. What should happen? I didn't see any other delegate methods in the API that would help. I don't have to manually check for timeouts, do I? Are timeouts only for synchronous requests?


回答1:


Your timeout is received in this method:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error



回答2:


u will br receiving such type of iofo:

in did fail with

error: Error Domain=NSURLErrorDomain Code=-1001 UserInfo=0xed4870 "timed out"




回答3:


The timeout behaviour is a bit quirky, see this thread on Apple’s developer forums.




回答4:


What I did was this:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
    if (error.code == -1001){
        [self showTimeoutAlert];//My method to show dialog with timeout message.
    } else {
        [self showInvalidURLAlert];//My method to show dialog with bad URL message.
    }
}

As said before -1001 is for timeout, in other tests I got -1003 (for bad URL or no connection avaliable).

I was aiming to treat timeout so anything else I treated as bad URL.




回答5:


Put some log statements in each method and check what they give. Whenever it times out, you definitely get a notification on the console about the timeout. I am getting that notification . Check your code and if you are still have problems, let us know.



来源:https://stackoverflow.com/questions/1252669/handling-a-nsurlrequest-with-timeout-when-using-delegate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!