如果数据开始加载但不是webViewDidFinishLoad,NSMutableURLRequest超时不会触发

时间:2009-12-10 20:44:10

标签: timeout uiwebview nsurlrequest

我正在加载UIWebview并请求可能需要一些时间才能完成加载的URL。请求开始并开始接收数据。但是,请求似乎没有完成。 webViewDidFinishLoad永远不会触发webView didFailLoadWithError:callback。

如果没有响应接收数据,是否只发生NSURLRequest的超时;如果请求在该时间间隔内没有完成,它是否会触发?

如果是前者,是否有一个优雅的解决方案来超时请求?

相关代码是:

加载请求:

- (void) loadRequest { NSString *targetURL = @"http://myrequestUrl/"; NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: targetURL] cachePolicy: NSURLRequestReloadIgnoringLocalCacheData timeoutInterval: 15.0] autorelease];

[request setHTTPBasicID: [[self credentialManager] userID] password:[[self credentialManager] password]];
[webView loadRequest:request];

[request setHTTPBasicID: [[self credentialManager] userID] password:[[self credentialManager] password]]; [webView loadRequest:request];

委派回应超时

2 个答案:

答案 0 :(得分:5)

NSURLRequest的超时用于连接。如果你连接起来并且服务器响应需要很长时间,那么他的超时对你没有好处。您需要为自己想要的超时设置自己的NSTimer并自行取消请求。

答案 1 :(得分:0)

同意user158743。

使用NSTimer,将计时器设置为从webViewDidStartLoad委托方法开始,然后确保在webViewDidFinishLoad和webViewDidStarLoad方法中有计数器来检查webView是否已加载(这是一个丑陋的黑客,但除非你使用用于检查页面中元素数量的javascript,实际上无法知道这两种方法的调用次数。)

执行此操作后,请在计时器到达时间后检查您正在运行的方法的计数器,这应该有效。

NSTimer代码在这里 - > http://www.iphonedevsdk.com/forum/iphone-sdk-development/14403-nstimer-examples.html

希望这会有所帮助,它对我有用。虽然我知道存在缺陷,但它对我来说很有用,因为我正在加载一个首先应该是轻量级的闪屏。我仍然在寻找解决方案,如果我有其他选择,我会在这里发布编辑。

非常欢迎反馈!