Application error in [UIWebView webView: didReceiveTitle: forFrame:]

I implement a simple browser in the application. In my home view ( UITableViewController), I have something like:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

        WebViewController *webViewController = [[WebViewController alloc] init];
        switch (indexPath.row) {
            case 0:
                webViewController.stringURL = @"http://www.google.com";
                break;
            case 1:
                webViewController.stringURL = @"http://www.bing.com";
                break;
            default:
                webViewController.stringURL = @"http://stackoverflow.com"; 
                break;
        }

        [self.navigationController pushViewController:webViewController animated:YES];
        [webViewController release];
    }

The app crashed after moving back and forth again between my home view and webViewControllerseveral times.

Inside the class webViewController, I have nothing but [UIWebView *webView]and [UIActivityIndicatorView *activityIndicator]. Both have attributes nonatomic, retain. Here is the implementation.

        #import "WebViewController.h"
        @implementation WebViewController
        @synthesize webView, activityIndicator, stringURL;

        - (void)dealloc
        {
            [self.webView release];
            self.webView.delegate = nil;
            [self.activityIndicator release]; 
            [super dealloc];
        }

        -(void)loadView {
            UIView *contentView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
            self.view = contentView;    

            CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
            webFrame.origin.y = 0.0f;
            self.webView = [[UIWebView alloc] initWithFrame:webFrame];
            self.webView.backgroundColor = [UIColor blueColor];
            self.webView.scalesPageToFit = YES;
            self.webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
            self.webView.delegate = self;
            [self.view addSubview: self.webView];
            [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.stringURL]]];

            self.activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
            self.activityIndicator.frame = CGRectMake(0.0, 0.0, 30.0, 30.0);
            self.activityIndicator.center = self.view.center;
            [self.view addSubview: self.activityIndicator];
        }

        - (void)viewDidLoad
        {   
            [super viewDidLoad];
            [self loadView];
        }

        - (void)webViewDidStartLoad:(UIWebView *)webView
        {
            // starting the load, show the activity indicator in the status bar
            [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
            [activityIndicator startAnimating];
        }

        - (void)webViewDidFinishLoad:(UIWebView *)webView
        {
            // finished loading, hide the activity indicator in the status bar
            [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
            [activityIndicator stopAnimating];
        }

        @end


I just launched the application in Tools using the Zombies template, which shows that it -[UIWebView webView:didReceiveTitle:forFrame:]’s a Zombie call. But I still can not understand what the problem is.

(Download trace if necessary)

Any help is much appreciated!


[Refresh]:

  • @7KV7 @David, dealloc . self.webView.delegate=nil;, self.webView. . , , , .
  • [webViewController release]; , . , , .
+3
5

, loadView viewDidLoad. , , XIB . -, loadView . , , . , dealloc.

. - alloc-init-autorelease, . - , , , - loadView, - . . , . reset -, . , . . , nil .

+3
- (void)dealloc
{
self.webView.delegate = nil;
[self.webView release];
[self.activityIndicator release]; 
[super dealloc];
}

dealloc. webview, delegate nil. delegate nil, release. , .

+2

, , , - , , - . [webView stopLoading] viewDidUnload, , .

+1

, , :

[self.webView release];
self.webView.delegate = nil;

() self.webView !

0

, webViewController, self.view. [self loadView]; in viewDidLoad.

0

All Articles