在UIWebView中点击链接后,[[UIApplication sharedApplication] openURL“ - 多任务处理

时间:2011-02-24 14:28:32

标签: iphone objective-c cocoa-touch

我在一个Application中显示一个UIWebView,它在链接上接收点击后发送委托方法调用。 在委托方法

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

我抓住这些电话,处理链接网址并运行

[[UIApplication sharedApplication] openURL:processedURL];

这是按预期工作的,我最终到了正确的位置。

问题多任务: 如果我回到我的应用程序,它在关闭后仍然在后台运行,它将再次使用相同的链接调用“webView shouldStartLoadWithRequest”,所以我最终将用户发送到该页面两次。有没有一种避免这种情况的首选方法?

解决方案:

你们是完全正确的,我做了一个非常拉长的if-else来分析给定的URL,但不是在所有分支中,决定可能最终存在“返回否”......呃,完全是愚蠢的错误; )

2 个答案:

答案 0 :(得分:1)

未经测试,但我建议这样做:

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

这样回调可以根据需要返回,在下一次runloop迭代中,它将调用openURL:

答案 1 :(得分:1)

清除UIWebView,以便在重新加载时,它没有待处理的请求。这可能是最好的方式:

[webView loadRequest:nil];

但如果这不起作用,您可以使用:

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

当然,您应该从此委托方法返回NO,因为您不希望webview尝试加载此内容。