Im делает проект, в котором я подключаюсь к веб-странице с помощью NSURLConnection, чтобы отслеживать возвращаемые коды состояния (200 OK/404 ERROR). Я хотел бы отправить пользователя на верхний URL-адрес www.domain.com, если я получу 404 в качестве кода статуса, и если я получу код статуса из 200, я бы хотел загрузить страницу в веб-просмотр. Я видел несколько реализаций этой проблемы, создав новый запрос, но я чувствую, что это не нужно, поскольку вы уже получили html в первом запросе, поэтому я просто хотел бы загрузить этот HTML-код в webView.Загрузить HTML NSString в UIWebView
Поэтому я пытаюсь использовать [webView loadHTMLFromString: baseURL:], но он не всегда работает, я заметил, что когда я печатаю NSString с html в connectionDidFinnishLoading, он иногда имеет значение NULL и когда я контролирую эти случаи печать html в didReceiveData случайное число последних пакетов равно NULL (отличается от 2-10). Это всегда одни и те же веб-страницы, которые не загружаются. Если я загружу их в свой webView с помощью [webView loadRequest: myRequest], он всегда работает. Моя реализация выглядит так, возможно, кто-то из вас может видеть, что я делаю неправильно.
Создайте свой первый запрос нажатием кнопки.
-(IBAction)buttonClick:(id)sender
{
NSURL *url = [NSURL URLWithString:@"http://www.domain.com/page2/apa.html"];
NSURLRequest *theRequest = [NSURLRequest requestWithURL:url]
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if(theConnection)
{
webData = [[NSMutableData data] retain];
}
else
{
}
}
Затем я контролировать код ответа в методе didReceiveResponse литья запроса к NSHTTPURLResponse, чтобы иметь возможность получить доступ к кодам состояния, а затем установив Bool в зависимости от кода состояния.
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSHTTPURLResponse *ne = (NSHTTPURLResponse *)response;
if ([ne statusCode] == 200) {
ok = TRUE;
}
[webData setLength: 0];
}
Затем я проверяю значение bools в соединенииDidFinnishLoading. Если я зарегистрирую html NSString, я получаю источник веб-страницы, поэтому я знаю, что это не пустая строка.
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *html = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:@"http://www.domain.com/"];
if (ok) {
[webView loadHTMLString:html baseURL:url];
ok = FALSE;
}
else {
// Create a new request to www.domain.com
}
}
webData - это переменная экземпляра, и я загружаю ее в didReceiveData следующим образом.
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[webData appendData:data];
}
какие ошибки вы видите? вы просто сказали, что он не работает? –
Я не получаю ошибок компилятора, но UIWebView полностью пуст, хотя он вызвал и методы делегата webViewDidStartLoad и webViewDidFinishLoad: – ehenrik