使用请求调用UIWebView webViewDidStartLoad,其属性为null

时间:2011-05-11 15:48:10

标签: iphone performance uiwebview

我目前正在调试UIWebView以获取一些信息以提高性能(在服务器和iPhone上)。 我注意到在调用loadRequest之后:回调

- (void)webViewDidStartLoad:(UIWebView *)webView_ 
调用

,但请求的每个参数都为null。

我使用以下声明:

    - (void)webViewDidStartLoad:(UIWebView *)webView_{
    NSLog(@"%@ \t Start Request: %@ \n absolute: %@ \n Method: %@ \n Parameters: %@ \n Port: %@ \n Query: %@ \n Header Fields: %@ \n HTTPBody: %@ \n HTTPBodyStream: %@", [NSDate date], [[webView_ request] mainDocumentURL], [[[webView_ request] mainDocumentURL] absoluteString], [[webView_ request] HTTPMethod], [[[webView_ request] mainDocumentURL] parameterString], [[[webView_ request] mainDocumentURL] port], [[[webView_ request] mainDocumentURL] query], [[webView_ request] allHTTPHeaderFields], [[webView_ request] HTTPBody], [[webView_ request] HTTPBodyStream]);
}

输出结果为:

 2011-05-11 17:15:34 +0200    Start Request: (null) 
 absolute: (null) 
 Method: GET 
 Parameters: (null) 
 Port: (null) 
 Query: (null) 
 Header Fields: {
} 
 HTTPBody: (null) 
 HTTPBodyStream: (null)

是否有任何解释此行为或解决此问题的任何事情?

页面加载正常,但请求加载似乎需要大约30秒,我试图避免。

编辑:有关加载webview的一些其他信息。我正在调用一个方法,将webview添加到UIView并加载URL

    UIWebView * web = [[UIWebView alloc] initWithFrame:CGRectMake(indent, topindent+indent, screenSize.width-2*indent, screenSize.height-2*indent-topindent)];
     web.delegate = self;
    [view addSubview:web];
    NSURLRequest * someUrl = [NSURLRequest requestWithURL:[NSURL URLWithString:
@"some_URL"]];
    [web loadRequest: someUrl];

3 个答案:

答案 0 :(得分:2)

您没有看到请求的原因是,在加载请求之前,不会分配webview的请求属性。在重定向之后,这可能只显示实际显示的请求。如果你想要初始请求对象,在重定向等之前,请使用ToddH的答案。对于最终请求,您必须在webViewDidFinishLoad中进行检查。

答案 1 :(得分:1)

好吧,在努力解决同样的问题后,我发现解决方案就是使用这个UIWebViewDelegate方法:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

它在viewDidStartLoad之前调用,并传递视图将加载的请求对象。

答案 2 :(得分:0)

您未检查的一件事是请求网址属性。检查一下,看看你得到了什么:

[[[webView_ request] URL] absoluteString]

编辑:

看起来您可能遇到自动释放对象的问题。尝试从NSURLRequest创建NSURL:

NSURL *myURL = [NSURL URLWithSTring:@"some_URL"];
NSURLRequest *someUrl = [NSURLRequest requestWithURL:myURL];
[web loadRequest:someUrl];