UIWebView webViewDidStartLoad вызывается с запросом, свойства которого являются нулевыми - PullRequest
9 голосов
/ 11 мая 2011

В настоящее время я отлаживаю UIWebView, чтобы получить некоторую информацию для повышения производительности (на сервере и iPhone). Я заметил, что после вызова loadRequest: обратный вызов

- (void)webViewDidStartLoad:(UIWebView *)webView_ 

вызывается, однако каждый параметр запроса является нулевым.

Я использую следующее утверждение:

    - (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 секунд, чего я стараюсь избегать.

edit: некоторая дополнительная информация о загрузке 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 ]

2 голосов
/ 18 декабря 2012

Причина, по которой вы не видите запрос, заключается в том, что свойство запроса веб-просмотра не назначается до тех пор, пока запрос не будет загружен. Скорее всего, это будет отображать только отображаемый запрос после всех перенаправлений. Если вы хотите исходный объект запроса, перед перенаправлением и т. Д. Используйте ответ ToddH. Для окончательного запроса вам нужно будет проверить его в webViewDidFinishLoad.

1 голос
/ 09 августа 2011

Что ж, после борьбы с этой же проблемой я обнаружил, что решение состоит в том, чтобы использовать этот метод UIWebViewDelegate:

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

Он вызывается прямо перед viewDidStartLoad и передается объект запроса, с которым представление будет загружаться.

0 голосов
/ 11 мая 2011

Единственное, что вы не проверили, это свойство URL запроса. Проверьте это и посмотрите, что вы получите:

[[[webView_ request] URL] absoluteString]

Редактировать:

Похоже, у вас могут быть проблемы с автоматически выпущенными объектами. Попробуйте создать NSURL отдельно от NSURLRequest:

NSURL *myURL = [NSURL URLWithSTring:@"some_URL"];
NSURLRequest *someUrl = [NSURLRequest requestWithURL:myURL];
[web loadRequest:someUrl];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...