iOS UIWebView 在 NSURLConnection 之后不加载 url

Posted

技术标签:

【中文标题】iOS UIWebView 在 NSURLConnection 之后不加载 url【英文标题】:iOS UIWebView not load url after NSURLConnection 【发布时间】:2013-11-18 17:24:01 【问题描述】:

使用 ios 7 SDK 创建简单的应用程序,但在 ios 6.x 和 7.x 上测试应用程序并得到相同的结果。 有两个 ViewController——第一个 MainScreen 和第二个 WebScreen

如果我在 MainScreen 上使用 NSURLConnection 作为我的 url,UIWebView 不会从同一站点加载内容。

在 MainScreen 中,我将 json 作为字符串从 url 加载

NSString *urlAsString = [NSString stringWithFormat:@"https://site.ws/api/index/index?method=get_count_new_orders&login=%@&password=%@", @"login", @"pass"];
NSURL *url = [[NSURL alloc] initWithString:urlAsString];
[NSURLConnection sendAsynchronousRequest:[[NSURLRequest alloc] initWithURL:url] queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 

        if (error) 
            NSLog(@"error ::: %@", error);
         else 

            NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

            NSError *jserror = nil;            
            NSDictionary *JSON = nil;
            JSON = [NSJSONSerialization JSONObjectWithData: [string dataUsingEncoding:NSUTF8StringEncoding] options: NSJSONReadingMutableContainers error: &jserror];

        

    ];

在第二个屏幕上,我尝试从同一站点加载页面:

NSString *stringUrl = [NSString stringWithFormat:@"https://reserva.ws/?lang=en"];
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:stringUrl]]];

和 UIWebView 加载空白页面。

但是,如果我在第一个屏幕上评论 [NSURLConnection sendAsynchronousRequest...,webview 工作正常。

【问题讨论】:

【参考方案1】:

我对您的问题进行了小型研究,然后将您的代码复制到 Xcode。我所做的是:

    基于 UINavigationController 创建新项目。 在 root vc 中,我将您的第一个代码示例复制到 viewDidLoad 方法。 在第二个 vc 中,我将您的第二个代码示例复制到 viewDidLoad 方法。 vcs 之间的切换基于从 UINavigationController 堆栈弹出/推送 vc。 最后,一切看起来都很好。

推送第二个 vc webview 后正确加载 url 源网页。 我认为您应该使用 webview 委托属性并将其设置为您的 webview 对象所在的 vc 。然后在其中实现这个vc方法:

-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error

如果您的 webview 未加载,请检查是否出现错误。 它应该可以帮助您找到问题的根源。

【讨论】:

感谢您进行如此大规模的研究和测试,但问题出在 cookie 中。我认为这是由于该网站上的授权架构错误。【参考方案2】:

经过几天的考虑,我认为这可能是由于 cookie 的原因。 我在 [self.webView loadRequest...

之前尝试过
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies])

    [storage deleteCookie:cookie];

这个修复问题。

【讨论】:

谢谢伙计!我希望我能给你的答案投票 1000 次! :)

以上是关于iOS UIWebView 在 NSURLConnection 之后不加载 url的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIWebView 上显示覆盖而不阻止用户与 UIWebView 的交互

在 xib 上更改小部件的类? (将 UIWebView 更改为我自己的 UIWebView 类别)

在 UITableViewCell 中加载 UIWebView 并根据 UIWebview 的内容制作 UITabViewCell 的高度

UIWebView 正在请求位置权限

UIWebView 在 UIScrollView 内消耗触摸事件

如何在 ios 中将 NSString 数据转换为 Uiimage 视图