views:

30

answers:

1

Hi
Quite new to network programming and espacially objective-c networking...
Even if I shut down the network interface on my computer, or sets my iPhone in flught mode, NSURLConnection won't return nil with the unpleasent surprise that the application dies.

I conform to NSURLConnection protocol with all correct callback methods...

So how would you handle the case where the client has no internet connection?

Code snippet where I post login data to a server:

-(void)Login {
     ...
     NSURLConnection *theConnection = [NSURLConnection connectionWithRequest:post delegate:self];
    if (theConnection==nil) {
         //Here I want to show an alert but this case never happens....
    }
    else {
         receivedData=[[NSMutableData data] retain];
    }
}
...


//This callback is called correctly but no alert shows up and after this method app dies.

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    [connection release];
    [receivedData release];
    [self setLoggedIn:NO];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                              message:[error localizedDescription]
                                              delegate:self
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles: nil];
    [alert show];
    [alert release];
}
+2  A: 

Your app probably crashes because you are releasing the connection object even though you don't own it. Remove [connection release]; from the delegate method.

Ole Begemann
niel41