Я делаю проект, где я подключаюсь к веб-странице, используя NSURLConnection, чтобы иметь возможность отслеживать возвращаемые коды состояния (200 OK / 404 ОШИБКА).Я хотел бы отправить пользователя на верхний URL-адрес www.domain.com, если я получу код 404 в качестве кода состояния и если я получу код статуса 200, я бы хотел загрузить страницу в веб-просмотр.Я видел несколько реализаций этой проблемы, создавая новый запрос, но я чувствую, что это не нужно, поскольку вы уже получили html в первом запросе, поэтому я просто хотел бы загрузить этот HTML-код в webView.
Поэтому я пытаюсь использовать [webView loadHTMLFromString: baseURL:], но это не всегда работает, я заметил, что когда я печатаю строку NSString с html в connectionDidFinnishLoading, она иногда равна нулю, и когда я наблюдаю за этимиВ случаях, при печати 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 в connectionDidFinnishLoading.Если я регистрирую 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];
}