2011-02-24 41 views
1

我在應用程序中顯示一個UIWebView,它在接收到鏈接上的點擊後將它發送給委託方法調用。 在委託方法「[[UIApplication sharedApplication] openURL」在UIWebView中點擊鏈接後 - 多任務

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType 

我趕上這些調用,處理鏈接的URL和運行

[[UIApplication sharedApplication] openURL:processedURL]; 

這按預期工作,我在正確的地方結束。

問題多任務: 如果我回到我的應用程序,它仍然是在後關閉它,它會再次調用「webView的shouldStartLoadWithRequest」有同一鏈接後臺運行,所以我最終向用戶發送到頁面兩次。有避免這種情況的首選方法嗎?

解決方案:

你們是完全正確的,我做了一個很長的if-else來分析給定的URL,但不是在所有分支機構的決定最終可能會在那裏存在着一個「不返回」 ...咄,完全愚蠢的錯誤;)

+0

在我的應用程序中,我看不到你看到的同樣的行爲,其中'webView:shouldStartLoadWithRequest:'在恢復後被再次調用。你是否從這種方法返回「否」? – 2011-02-24 14:34:35

回答

1

清除UIWebView,以便在自身重新加載時,不會有請求掛起。這可能是最好的做法是這樣的:

[webView loadRequest:nil]; 

但是,如果不工作,你可以使用:

[webView loadHTMLString:@"" baseURL:nil]; 

當然,你應該因爲你不」此委託方法返回NO不想讓webview嘗試加載此內容。

1

沒有測試,但是我建議這樣做:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    [[UIApplication sharedApplication] performSelector:@selector(openURL:) 
              withObject:processedURL 
              afterDelay:0]; 
    return NO; 
} 

這樣的回調可以返回根據需要,並在第二天runloop迭代它會請致電openURL:

相關問題