UIWebView webViewDidStartLoad é chamado com pedido cujas propriedades são nulas

9

Atualmente estou depurando um UIWebView para obter algumas informações para melhorar o desempenho (no servidor e no iPhone). Notei que depois de chamar loadRequest: o callback

- (void)webViewDidStartLoad:(UIWebView *)webView_ 

é chamado, no entanto, cada parâmetro da solicitação é nulo.

Estou usando a seguinte declaração:

    - (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]);
}

A saída é:

 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)

Existe alguma explicação para esse comportamento ou algo para corrigir isso?

A página carrega bem, no entanto, a solicitação de carregamento nada parece demorar cerca de 30 segundos que eu tento evitar.

edit: algumas informações adicionais sobre o carregamento da visualização da web. Eu estou chamando um método que adiciona o webview para o UIView e carrega o 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];
    
por Steve Hummingbird 11.05.2011 в 17:48
fonte

3 respostas

2

O motivo pelo qual você não está vendo uma solicitação é que a propriedade de solicitação do webview não foi atribuída até que a solicitação tenha sido carregada. Isso provavelmente mostrará apenas a solicitação exibida real, depois de todos os redirecionamentos. Se você quiser o objeto de solicitação inicial, antes dos redirecionamentos, etc, use a resposta de ToddH. Para o pedido final, você terá que verificá-lo em webViewDidFinishLoad.

    
por Smeedge 17.12.2012 / 22:09
fonte
1

Bem, depois de lutar com esse mesmo problema, descobri que a solução é usar esse método UIWebViewDelegate:

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

Ele é chamado logo antes de viewDidStartLoad e é passado pelo objeto de requisição com o qual a view será carregada.

    
por ToddH 09.08.2011 / 17:45
fonte
0

A única coisa que você não verificou foi a propriedade do URL de solicitação. Verifique isso e veja o que você recebe:

[[[webView_ request] URL] absoluteString]

Editar:

Parece que você está tendo problemas com objetos autoreleased. Tente criar a NSURL separada da NSURLRequest:

NSURL *myURL = [NSURL URLWithSTring:@"some_URL"];
NSURLRequest *someUrl = [NSURLRequest requestWithURL:myURL];
[web loadRequest:someUrl];
    
por Dan F 11.05.2011 / 17:54
fonte