代码之家  ›  专栏  ›  技术社区  ›  Nava Carmon

WebViewDidFinishload异常

  •  0
  • Nava Carmon  · 技术社区  · 16 年前

    我的导航控制器堆栈中有一个带有webview的屏幕,当我在页面完全加载之前从这个视图导航回上一个视图时,我会得到一个异常访问。似乎,在WebViewDidFinishload函数之前,已经发布了带有WebView的视图。我的问题是如何克服这个问题?我不希望用户等到页面加载…代码非常简单:

    - (void) viewWillAppear:(BOOL)animated
    

    {

    [super viewWillAppear:animated];
    
    NSURL *url = [NSURL URLWithString:storeUrl];
    
    //URL Requst Object
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    
    //Load the request in the UIWebView.
    [browser loadRequest:requestObj];
    

    }

    蒂亚

    1 回复  |  直到 16 年前
        1
  •  1
  •   cduhn    16 年前

    我猜您已将browser.delegate属性设置为自定义uiviewcontroller。当您单击“上一步”按钮时,此控制器将从导航堆栈中弹出并解除锁定,使browser.delegate指向已释放的内存。页面加载完成后,uiwebview对其委托调用一个方法,该方法已不存在,因此您将获得exc_bad_访问权限。

    为了防止此类错误,在任何时候设置对象的delegate属性时,请确保在dealloc中将该属性设置为nil,如下所示:

    - (void)dealloc {
        self.browser.delegate = nil; // Prevents EXC_BAD_ACCESS
        self.browser = nil; // releases if @property (retain)
        [super dealloc];
    }
    

    由于nil会静默地吞咽它接收到的任何消息,这将阻止您的exc_bad_访问。