2011-02-24 30 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:

相关问题