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 的高度