Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS UIWebView loadRequest花费的时间太长_Ios_Objective C_Uiwebview_Wkwebview_Request Timed Out - Fatal编程技术网

iOS UIWebView loadRequest花费的时间太长

iOS UIWebView loadRequest花费的时间太长,ios,objective-c,uiwebview,wkwebview,request-timed-out,Ios,Objective C,Uiwebview,Wkwebview,Request Timed Out,我的应用程序中有一个UIWebView -(void)viewDidLaod{ NSURL *url = [NSURL URLWithString:@"some url string"]; NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadRevalidatingCacheData timeoutInterval:30.0]; myW

我的应用程序中有一个
UIWebView

-(void)viewDidLaod{
    NSURL *url = [NSURL URLWithString:@"some url string"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadRevalidatingCacheData timeoutInterval:30.0];        
    myWbView.delegate = self;
        [myWebView loadRequest:request];

        if ([timer isValid]) {
            [timer invalidate];
        }else{
            timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(addSec:) userInfo:nil repeats:YES];
             //counting seconds
}

-(void)webViewDidFinishLoad:(UIWebView *)webView{
    if (webView.isloading){
    NSLog(@"LOADING");//it takes 5-8 seconds in average keep logging this
    }else{
    NSLog(@"FINISH");//since the request started,8-15 seconds later this is logged out
    }
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
NSLog(@"LOAD FAIL: %@",error);
}
这是我正在加载的, 我将webview控制器放入一个
pageViewController
中,每当我滑动到下一页时,一个新的加载请求就会启动

(当刷出的视图解除锁定时,我会停止任何未完成的加载,因此不会阻塞web踏板)

有时我会收到一些错误消息,如:

作为应用程序开发的新手,我完全不知道我的代码出了什么问题,是某个线程卡住了还是使用JavaScript/HTML5的网页影响了速度

我研究过Flipboard应用程序(iOS7版本),它使用webview加载内容页面,用户点击任何帖子后,它会立即响应。即使
UIWebView
的加载速度通常很慢,也可以获得更快的性能

任何我应该知道的建议指南链接/背景知识将不胜感激

PS:因为另一个更好的东西
WKWebView
仅在iOS8及更高版本中受支持 (在我的应用程序
WKWebView
中,加载速度与
UIWebView
相同,但在,
我仍然需要iOS7的UIWebView。

使用performselector inbackground移动请求,否则它会阻止您的UI线程。另一点,UIWebView对象很重,

那么,您打印的错误的
NSLocalizedDescription
说明了发生的情况:“HTTP重定向太多了。”

当您尝试访问某个网页时,服务器可以用重定向来回复,而不是提供您试图访问的网页,并为您应该转到的另一个网页指定一个地址。例如,访问缩短的链接通常会将您重定向到真实页面;受密码保护的网站可能会将您重定向到登录页面;或者重新设计的站点可能会将旧地址重定向到新位置

但是,如果不小心实现,此功能可能会无限重定向浏览器,从而锁定浏览器:例如,想象一下如果
www.example.com/a
将您重定向到
www.example.com/b
,并且
www.example.com/b
将您重定向回
www.example.com/a
。因此,浏览器对重定向的数量施加限制,通常为10或15个左右,以避免陷入此类循环中

您遇到的错误意味着,出于某种原因,访问该页面会导致浏览器连续多次重定向,以至于它认为一定是出了问题,于是放弃了

坐在这里,没有你的应用程序副本进行检查,我无法告诉你这些重定向是什么,更不用说为什么会发出这些重定向,但你至少可以使用Safari Web Inspector回答第一个问题。您可以在Safari的“开发”菜单中找到它,该菜单可以在Safari首选项中启用;该菜单中有一些选项可用于检查iOS设备或模拟器中的网页。您可能还需要在设备或模拟器的Safari设置中打开Web Inspector选项


Web Inspector的时间线工具可以告诉您发送的重定向。一旦你知道了这一点,你就可以弄清楚它为什么这么做,甚至可以调整你的应用程序来解决这个问题。(例如,您的UIWebView使用的用户代理字符串可能会混淆所涉及的服务器。不过,这是一个完全的猜测,所以不要假设这就是这里发生的情况。)

检查您的internet速度。。。或者你的网页很重。。。请提供您正在添加的网页的url…该网页在帖子中,我尝试了3G/Wifi/4G,速度差异很小(1-2秒)使用GCD或performselectorinbackground将请求移动到另一个线程。。。否则它会阻塞您的UI线程。另一点,UIWebView对象很重,在页面上加载它可能需要时间。UIWebView请求不应该在主线程中,因为它来自UIKit?问题来自网站本身
UIWebView不是Safari
,它希望内容更轻。。我刚刚在桌面上的Chrome上打开了这个网站,加载它花了一些时间。。尝试剽窃内容,然后加载。。如果可能的话,请你为我们澄清一下你的意思?尤其是使用语句“UIWebView对象很重”?它有重量吗?另外,分享好的东西总是好的,而不仅仅是留下一条评论。我收到了新的错误:error Domain=NSURLErrorDomain Code=-999“操作无法完成。NSURL和CFURL使用相同的错误代码,这些错误代码列在CFNetworkErrors.h中。(在Xcode中,点击Cmd-Shift-O并键入“CFNetworkErrors.h”查看该文件。)-999已被kCFURLErrorCancelled,这意味着您这方面的某些人决定取消该请求。我已删除了带有附加信息的答案…这似乎不是网页端的问题,但某些UI内容阻止了该线程。无论如何,感谢您的建议!