XCode Webview Verbindung / Server Fehlerbehandlung

Alle

Ich bin ziemlich neu in XCode und versuche herauszufinden, wie ich mit Verbindungsproblemen am besten umgehen kann, wenn ich ein WebView verwende. Ich weiß, dass es verwandte Fragen zu SO gibt, aber keine scheint vollständige Lösungen anzubieten. Ich habe den folgenden Code, aber es scheint ein wenig ineffizient. Hoffentlich kann mir jemand dabei helfen, es bis zu einem Punkt umzugestalten, an dem es überall verwendet werden kann, wo ein UIWebView aufgerufen wird.

HINWEIS: Bitte ignorieren Sie vorerst Speicherprobleme. Mir ist klar, dass das auch hinzugefügt werden muss.

- (void)viewDidLoad {
    [webView setDelegate:self];

    NSString *urlAddress = @"http://www.somesite.com/somepage";
    NSURL *url = [NSURL URLWithString:urlAddress];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];

    NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];

    [super viewDidLoad];
}

// Check for URLConnection failure
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    UIAlertView *connectionError = [[UIAlertView alloc] initWithTitle:@"Connection error" message:@"Error connecting to page.  Please check your 3G and/or Wifi settings." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [connectionError show];
    webView.hidden = true;
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {

    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;

    //Check for server error
    if ([httpResponse statusCode] >= 400) {
        UIAlertView *serverError = [[UIAlertView alloc] initWithTitle:@"Server error" message:@"Error connecting to page.  If error persists, please contact support." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
        [serverError show];
        webView.hidden = true;

    //Otherwise load webView
    } else {
        // Redundant code
        NSString *urlAddress = @"http://somesite.com/somepage";
        NSURL *url = [NSURL URLWithString:urlAddress];
        NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];

        [webView loadRequest:urlRequest];
        webView.hidden = false;
    }
}

// Seems redundant since we are already checking the URLConnection
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {

    UIAlertView *connectionError = [[UIAlertView alloc] initWithTitle:@"Connection error" message:@"Error connecting to page.  Please check your 3G and/or Wifi settings." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [connectionError show];
}

Ich denke, was ich mich frage, gibt es Verknüpfungen, um die gewünschte Funktionalität zu erreichen? Kann ich irgendwie über das WebView direkt auf die URLResponse zugreifen? Bedeutet ein Nullwert für URLConnection oder UIWebView, dass Verbindungsfehler vorliegen, ohne dass dies explizit überprüft werden muss? Gibt es eine einfachere Möglichkeit, die URLRequest an die Delegatmethoden weiterzugeben, damit sie nicht zweimal neu erstellt werden muss?

Danke im Voraus

Antworten auf die Frage(2)

Ihre Antwort auf die Frage