iPhone - Вызовите страницу php асинхронно и убедитесь, что она была загружена - PullRequest
1 голос
/ 07 мая 2011

В одном из моих приложений я хотел бы асинхронно вызывать написанную мною страницу php (http://serveradress/page.php?date=20111231),, и я бы точно знал, можно ли вызвать эту страницу (ошибка 404, сервер php отключен, настроен 404 страница, отсутствует подключение к Интернету или что-то в этом роде). Я планировал сделать так, чтобы страница php возвращала очень простую HTML-страницу с просто «ОК» в ее теле или заголовке.

Это будет «фантомный» вызов без использования какого-либо UIWebView или, если ДЕЙСТВИТЕЛЬНО встроенный, скрытого UIWebView, но я бы предпочел этого избежать.

Не могли бы вы помочь мне написать этот звонок?
И обязательно знать, загружен ли он?

Я видел, что, вероятно, мне следует использовать NSURLConnection, но я немного растерялся.

Не могли бы вы мне помочь?

1 Ответ

4 голосов
/ 07 мая 2011

NSURLConection - очень хорошее решение для асинхронной загрузки. Есть несколько шагов для его создания.

1. Настройте NSURLConnection

- (void)viewDidLoad {
    // your code...
    responseData = [[NSMutableData alloc] init];
    NSURL *url = [NSURL URLWithString:@"http://yourdomain.com/"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]];
}

responseData - это ваш NSMutableData iVar.

2. Реализуйте методы делегата

a) В этом методе мы проверим коды состояния HTTP

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    if ([response respondsToSelector:@selector(statusCode)]) {
        int statusCode = [((NSHTTPURLResponse *)response) statusCode];
        if (statusCode >= 400) {
            [connection cancel]; 
            NSDictionary *errorInfo = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:NSLocalizedString(@"Server returned status code %d",@""),statusCode] forKey:NSLocalizedDescriptionKey];
            NSError *statusError = [NSError errorWithDomain:NSHTTPPropertyStatusCodeKey code:statusCode userInfo:errorInfo];
           [self connection:connection didFailWithError:statusError];
        }
    }
}

b) Это создает ваш компонент NSData

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [responseData appendData:data];
}

в) Обрабатывает успешное соединение с URL-адресом

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    // do whatever you want using responseData as your server output
}

г) Обрабатывает ошибки

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    // handle your error
}

Вы можете получить информацию об ошибке, используя [error userInfo] И отобразить ее, например, в UIAlertView.

<ч />

Итак, как я сказал, NSURLConnection - очень хорошее решение, , но , вам также следует обратиться к ASIHTTPRequest library . :)

...