2010-08-12 1 views
1

У меня есть запрос на соединение, использующий метод stringWithContentsOfURL: encoding: error: from NSString. Я хочу, чтобы у меня была возможность повторить соединение, если оно не выполнено в первый раз. Я собирался переписать функцию, чтобы использовать функции тайм-аута NSURLRequest, но я думаю, что мне бы очень хотелось использовать несколько попыток до отказа.Принятый метод повторного запроса URL-адреса в Objective-C?

Помимо выполнения чего-то грубого, как контр-контур, есть ли принятый способ в Objective-C повторить попытку URL-адреса для данных?

EDIT: Хорошо, я внедрил NSURLConnection, чтобы получить данные, которые меня интересуют, и добавил некоторые рудиментарные обработки ошибок, используя NSError. Вот мой начальный удар в этом:

- (id)initWithURL:(NSURL*)aURL { 
    NSError  *error  = nil; 
    NSURLResponse *response = nil; 

    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:aURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20]; 

    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

    NSString *xmlString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

    if (response == nil) { 
     if (error) { 
      NSLog(@"Error has occurred: %@", [error localizedDescription]); 
     } 
    } 
} 

Примечание: Я не реализована стратегия на провал еще изящно, я просто протоколирование ошибку сейчас.

Используя этот код (или любые предлагаемые улучшения), какой был бы лучший способ реализации стратегии повтора здесь?

ответ

3

Не использовать +stringWithContentsOfURL:. Используйте правильное NSURLConnection. Он скажет вам, почему загрузка не удалась.

+0

Хотя я не думаю, что это ответ на вопрос, это хорошо для начала. – Joost

+0

Я собираюсь использовать NSURLConnection и использовать NSError, чтобы узнать причину, почему операция может быть неудачной. Как насчет сценария повторных попыток? Существуют ли обычно используемые шаблоны для повторного подключения? –

0

Я не думаю, что подход счетчика настолько плох. Пока этот вызов функции не находится на основном хлебе, блокируя пользовательский интерфейс, тогда, вероятно, не так много другого, что вы могли бы сделать. Поддерживайте счетчик, сколько раз вы хотите повторить попытку, затем в вашем блоке if попробуйте снова и увеличьте счетчик.