在UIWebView中加载Web内容的最佳选择是什么?

时间:2010-10-29 23:48:54

标签: iphone cocoa-touch

在之前的应用中,我使用4个步骤将数据加载到UIWebView中: 1.使用NSURL连接以异步方式从Web获取数据 2.下载完成后,将NSData对象转换为字符串,并在显示之前处理数据。 3.将转换后的数据写入doc文件夹 4.将数据从文件

加载到UIWebView中

但是在我当前的应用程序中,我没有必要操纵从Web加载的数据。我只是想异步下载,并在该视图尚不可见时将其加载到UIWebView中。然后在我需要时显示该视图。

使用作为块传递给GCD的loadRequest消息会更好吗?那可行吗?我试图避免写入本地文件的整个混乱,然后从该文件重新加载页面。建议?

3 个答案:

答案 0 :(得分:6)

为什么不直接将NSURLRequest提供给webview

如果您不需要按摩传输中的数据,它完全能够从网络上加载数据。

答案 1 :(得分:4)

试试这个

NSURL *url = [NSURL URLWithString:@"http://www.google.com"];

NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webview loadRequest:request];

一切顺利。

答案 2 :(得分:1)

<强>的UIWebView

您可以加载@Warrior提到的请求 它的主要优点是异步加载,您不必像@Kevin Ballard那样管理所有内容。

NSURL *url = [NSURL URLWithString:@"http://www.google.com"];

NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webview loadRequest:request];

<强> UIWebViewDelegate

但是如果您想要在网址完全加载时收到通知。您必须符合 UIWebViewDelegate

标题

 @interface YourController : UIViewController <UIWebViewDelegate>

实施

1.你必须将代表设置为自己

self.yourWebView.delegate = self;

2.您必须实施以下委托,以便在请求加载完成时通知您。

  - (void)webViewDidFinishLoad:(UIWebView *)webView {
    // Do whatever you want here
    } 

3.你必须将webview委托设置为nil并停止加载请求,并防止你自己因为悬挂指针而导致错误EXC_BAD_ACCESS Bug。你可以找到更多关于here的信息

  // If ARC is used
- (void)dealloc {
    [_webView setDelegate:nil];
    [_webView stopLoading];
}

// If ARC is not used
- (void)dealloc {
    [webView setDelegate:nil];
    [webView stopLoading];
    [webView release];
    [super dealloc];
}

// ARC - Before iOS6 as its deprecated from it.
- (void)viewWillUnload {
    [webView setDelegate:nil];
    [webView stopLoading];
} 

注意:

您不应在UIScrollView对象中嵌入UIWebView对象。如果这样做,可能会导致意外行为,因为两个对象的触摸事件可能会混淆和错误处理。

我希望这涵盖了最需要的基本内容