NSDictionary dictionaryWithContentsOfURL timeout? - PullRequest
1 голос
/ 04 августа 2011

Я написал простой код для получения строкового значения с веб-сервера, теперь я хочу установить тайм-аут, например, сделать getData 10 секунд, затем, если сервер не отвечает через 10 секунд, отменить получение данных и выполнить «noConnect».Любая идея, как я могу это сделать?

-(void)getData {
NSURL *url = [NSURL URLWithString: [NSString stringWithFormat:
@"http://exaple.com/example.plist"]];
NSDictionary *data = [NSDictionary dictionaryWithContentsOfURL:url];
NSString *aKey  = [chamUpdateData objectForKey:@"count"];
}
-(void)noConnect{}

Ответы [ 2 ]

0 голосов
/ 04 августа 2011

Создайте NSTimer из 10 секунд и вызовите функцию, которая проверит, не отвечает ли сервер или нет, и, соответственно, прекратит получать данные.

NSTimer * timer = [NSTimer scheduleTimerWithTimeInterval: 10.0 target: self selector: @selector (stopGettingData) userInfo: nil повторяет: NO];

Если приложение находится в cocos2d, вы не можете использовать NSTimer. Вместо этого запланируйте функцию с интервалом в 1 секунду и просто увеличьте число в этой функции и проверьте, равно ли оно 10 в том же, а если число равно 10, то вызовите функцию stopGettingData.

0 голосов
/ 04 августа 2011

Вы можете заключить вызов в dictionaryWith... в NSOperation, чтобы выполнить его асинхронно;затем запустите NSTimer, чтобы он начал работать, вы можете проверить состояние NSOperation;если оно все еще равно running, то вы отменяете его.

Имейте в виду, что я не знаю, как на самом деле остановить сетевой запрос, как только вы отправите его.Таким образом, у вас просто есть тайм-аут для управления случаем, когда соединение занимает больше времени.Если ответ приходит через 1 минуту, вы просто проигнорируете эти данные.

...