Я создаю NSMutableRequest
:
self.req = [NSMutableURLRequest requestWithURL:myURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0];
Тайм-аут установлен на 10 секунд, потому что я не хочу, чтобы пользователь слишком долго ждал, чтобы получить отзыв. После этого я создаю NSURLSessionDataTask
:
NSURLSessionDataTask *task = [self.session dataTaskWithRequest:self.req completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSHTTPURLResponse * httpResp = (NSHTTPURLResponse *)response;
if (error) {
// this is where I get the timeout
}
else if (httpResp.statusCode < 200 || httpResp.statusCode >= 300) {
// handling error and giving feedback
}
else {
NSError *serializationError = nil;
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&serializationError];
}
[task resume];
}
Проблема в том, что сервер уходит в тайм-аут шлюза, и это занимает много времени. Я получаю сообщение об ошибке тайм-аута и отправляю отзыв пользователю, но все следующие вызовы API терпят неудачу одинаково из-за ошибки тайм-аута. Единственный способ остановить это — убить приложение и начать заново. Есть ли что-то, что я должен сделать, чтобы убить задачу или соединение после ошибки тайм-аута? Если я не устанавливаю тайм-аут и жду, пока не получу код ошибки с сервера, все последующие вызовы работают отлично (но пользователь много ждет!).
Я попытался отменить задачу:
NSURLSessionDataTask *task = [self.session dataTaskWithRequest:self.req completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSHTTPURLResponse * httpResp = (NSHTTPURLResponse *)response;
if (error) {
// this is where I get the timeout
[task cancel];
}
...
[task resume];
}
self.req
, если есть ошибка/тайм-аут. Хотя не уверен в этом. - person Mrunal   schedule 15.07.2015