如何在UIWebView中加载网站URL而不冻结?

时间:2015-03-06 20:49:59

标签: ios objective-c uiwebview

我在下面这段代码中打开了一个带有网站URL的UIwebview,这是一个非常繁重的电子商务网站。一旦我开始浏览网站,我就会点击一个页面开始加载的块,但是没有完成。 就像在我的UIWebViewDelegate中一样,调用webViewDidStartLoad但是没有调用webViewDidFinishLoad ......

我的viewcontroller.h文件:

            #import <UIKit/UIKit.h>

            @interface WVTesterViewController : UIViewController <UIWebViewDelegate>

            @end

我的.m文件:

            #import "WVTesterViewController.h"

            @interface WVTesterViewController ()

            @end

            @implementation WVTesterViewController

            - (void)viewDidLoad
            {
                [super viewDidLoad];
                // Do any additional setup after loading the view, typically from a nib.

                UIWebView *view = self.view.subviews[0];
                view.delegate = self;
                NSURL *url = [NSURL URLWithString:@"<<< MY WEBSITE URL >>>"];
                [view loadRequest:[NSURLRequest requestWithURL:url]];
            }

            - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
            {
                NSLog(@"Failed to load with error :%@",[error debugDescription]);
            }

            - (void)webViewDidStartLoad:(UIWebView *)webView
            {
                NSLog(@"webViewDidStartLoad :");
            }

            - (void)webViewDidFinishLoad:(UIWebView *)webView
            {
                NSLog(@"webViewDidFinishLoad :");
            }

            - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
            {
                NSLog(@"shouldStartLoadWithRequest :");
                return true;
            }

            - (void)didReceiveMemoryWarning
            {
                [super didReceiveMemoryWarning];
                // Dispose of any resources that can be recreated.
            }

            @end

任何想法为什么会发生这种情况以及下面是我的网络线程的屏幕上限,我的应用程序在水中已经死了。

https://www.dropbox.com/s/ufmbncjbz0x0vbi/Screenshot%202015-03-06%2015.41.08.png?dl=0

其他信息

  • WebThread的CPU使用率为100%,表明发生了无限循环。
  • 网络线程调用的方法名称表明在初始页面加载期间发生了循环。
  • 当主线程需要在WebThread上运行代码时,就会发生死锁,导致它无限期地阻塞无限循环结束
  • 在生产代码中,UIWebViewIBOutlet的{​​{1}}属性,但在我们最小的可重复示例中,我们尽可能地避免了IB魔法。

1 个答案:

答案 0 :(得分:0)

您可能希望将webview对象作为属性添加到WVTesterViewController类中:

@property (weak, nonatomic) IBOutlet UIWebView *yourWebView;

并在您的实现文件(.m文件)中设置Web视图属性的委托,如下所示:

[self.yourWebView setDelegate:self];
[self.yourWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://yourWebsiteURL.com"]]];

尝试NSURLProtocol,您可以更好地控制加载和加载进度。