将NSData加载到UIWebView中

9
在我的网页浏览器中,我尝试使用从NSURLConnection获得的NSData加载UIWebView。当我尝试将它加载到UIWebView中时,它显示出HTML纯文本而非网站。

这是我的代码:

viewDidLoad: 中:

NSURLRequest *request = [NSURLRequest requestWithURL: [NSURL URLWithString:@"http://www.msn.com"]];
[NSURLConnection connectionWithRequest: request delegate:self];

代码的后面:

 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
  {
     webdata = [NSMutableData dataWithData: data];
  }

 -(void)connectionDidFinishLoading:(NSURLConnection *)connection
  {
    [webview loadData:webdata MIMEType: @"text/html" textEncodingName: @"UTF-8" baseURL:nil];
  }

UIWebView loading plain HTML instead of loading the page


请参见https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html - titaniumdecoy
1个回答

16

你没有将接收到的数据添加到原有数据中。请使用以下代码:

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    if (webdata == nil) {
        webdata = [[NSMutableData alloc] init];
    }
    [webdata appendData:data];
}
这种方法可能会根据数据长度被调用一次或多次。因此,不要将新数据分配给您的ivar,而是将其附加到其中,以便您拥有完整的响应而不是接收到的最后数据包。
------------------------------------------------------------------------------------------------------------------------------------
更新
或者像这样使用。
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
        webdata = [[NSMutableData alloc] init];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    [webdata appendData:data];
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    [mWebView loadData:webdata MIMEType: @"text/html" textEncodingName: @"UTF-8" baseURL:nil];
}

1
上面的方法非常有效,谢谢。只有一件事:当我使用这种方法时,它会加载网站的桌面版,而不是使用UIWebview loadRequest:NSURLRequest。有没有什么简单的方法可以默认加载移动版网站?(我对这种东西很新) - Greg
我也是 :D... 把这个作为一个新问题。在那之前,我会找到答案... 并且请在这里发布你的新问题链接,以便如果有答案,我也可以知道如何做。 - Inder Kumar Rathore
同时也在寻找如何加载移动版本,并使用自定义加载器来加载UIWebView中点击的链接。 - toasted_flakes
loadData对我来说不起作用。 我只得到了一个空白页面。 我检查并看到HTML代码确实在我的数据中。 - sudo
3
谢谢,这挽救了我的一天!但是 baseURL:nil 是不好的:https://dev59.com/Z4_ea4cB1Zd3GeqPOXJY - Dmitry Isaev
@DmitryIsaev 说得有道理。 - Inder Kumar Rathore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接