Search code examples
iosobjective-cxcodeuiwebviewuiwebviewdelegate

uiwebview not loading request even with delegate = self


I have created a NSObject class and included , in the init i create a uiwebview set the delegate to self and send the load request.

For some reason webViewDidFinishLoad or didFailLoadWithError never get fired. I can't figure why.

//
//  RXBTest.h
#import <Foundation/Foundation.h>
@interface RXBTest : NSObject <UIWebViewDelegate>
@end

//  RXBTest.m
//  pageTest
#import "RXBTest.h"
@implementation RXBTest
- (id) init
{
     if((self=[super init])){
         UIWebView* webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
         [webView setDelegate:self];

         [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]];
     }
     return self;
}   
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
     NSLog(@"ERROR LOADING WEBPAGE: %@", error);
}
- (void) webViewDidFinishLoad:(UIWebView*)webView
{
     NSLog(@"finished");
}
@end

anybody has any ideas?

thanks rudi


Solution

  • If you are using ARC, then the problem is that your webView variable is local to the init method and therefore is getting deallocated before the web view finishes loading. Try adding the web view as an instance variable:

    @interface RXBTest : NSObject <UIWebViewDelegate>
    {
        UIWebView* webView;
    }
    @end
    
    @implementation RXBTest
    - (id) init
    {
        if((self=[super init])){
            webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
            [webView setDelegate:self];
    
            [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]]];
        }
        return self;
    }
    - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
        NSLog(@"ERROR LOADING WEBPAGE: %@", error);
    }
    - (void) webViewDidFinishLoad:(UIWebView*)webView
    {
        NSLog(@"finished");
    }
    @end
    

    If you are not using ARC, you will need to remember to release your webView object in the dealloc method as well.