Как вызвать метод делегата через определенный промежуток времени? - PullRequest
0 голосов
/ 15 декабря 2010

Я использую класс, который загружает файл асинхронно .. работает примерно так

// in AViewController.m
DataGetter *blueFile = [[DataGetter alloc] init];
blueFile.delegate = self;
[blueFile getData:@"http://example.com/blue-file"];

У него есть метод делегата, который выполняет загрузку файла после загрузки

- (void) dataGetterFinished:(DataGetter *)dataGetter
{
// code
}

Это работает нормально в идеальных условиях, но, поскольку мы имеем дело с мобильным устройством, соединения не всегда надежны.Соединение может разорваться на полпути или может быть необычайно медленным.

Поэтому мне интересно, как бы я настроил метод делегата, который срабатывает, скажем, через 10 секунд, который затем отображает ошибку иостанавливает операцию.Должен ли я использовать NSTimer, или NSNotification, или какую-то комбинацию?

1 Ответ

1 голос
/ 15 декабря 2010

Куинн "Эскимос!" Apple провела два доклада о сетевом программировании для iPhone на WWDC 2010. Это сессии 207 и 208, вы можете скачать их здесь: http://developer.apple.com/videos/wwdc/2010/

Простой рецепт успеха сети:

  1. Использовать NSURLConnection асинхронно.
  2. Не не установить ручной тайм-аут с использованием таймеров или любых других средств, значения по умолчанию нормальные.
  3. Вместо этого будьте готовы обработать connection:didFailWithError:, который будет отправлен на тайм-ауты.
  4. При необходимости вы можете вручную отменить соединение, используя -[NSURLConnection cancel], например, в ответ на действия пользователя.
...