views:

18

answers:

2

My iOS app downloads document files from a server using the NSURLConnection class. I use it asynchronously.

It can happen that a document is missing from the server (configuration error). I expected NSURLConnection to call my delegate error method:

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

But it doesn't. Instead, it happily downloads the HTML error 404 web page returned by the server. The only workaround I found was to check the NSURLResponse MIMEtype property and fail myself when it is text/html. It works fine, but I don't like it because it precludes me from supporting html documents at a later date.

How can I check whether a requested URL is indeed present on the server?

Thanks

+1  A: 

When you receive the response (in -connection:didReceiveResponse:), you get to query the response. Because you're using HTTP, it will be a kind of NSHTTPURLResponse, though you may want to test for that. Anyway, it will tell you a -statusCode, which might be 200, 404 or something else.

Graham Lee
+1  A: 

In the - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response delegate method you can ask the response for it's error code.

if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
        if (httpResponse.statusCode == 404) {
                ...
             //etc
V1ru8