Принятый метод для повторного запроса URL в Objective-C? - PullRequest
1 голос
/ 12 августа 2010

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

Помимо выполнения чего-то грубого, такого как цикл счетчика, есть ли в 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]);
        }
    }
}

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

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

Ответы [ 2 ]

3 голосов
/ 12 августа 2010

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

0 голосов
/ 25 октября 2010

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

...