Я борется с проблемой, когда NSURLConnection
звонки мгновенно терпят неудачу. Необходимо полностью перезагрузить устройство или включить режим «Flight Mode» для разрешения проблемы. Перезапуск приложения (прокрутка вверх) не помогает.NSURLConnection случайно не работает до перезагрузки устройства
Некоторые факты:
-Все URL-адреса являются HTTPS, TLS 1.2 совместим с Forward секретность. Нет проблем с ATS и iOS 9. Ошибка присутствует с iOS 7 и остается на 9.2.
-Нет сторонних фреймворков, используемых приложением. Я использую только собственные вызовы NSURLConnection
, которые всегда работают, за исключением случаев возникновения этой нечетной ситуации.
-Нет проблем с инфраструктурой/сетью - другие устройства в одних и тех же сетях (например, такие же WiFi) работают в одном приложении одновременно. Переход в/из 3G/Wifi не имеет значения.
-I всегда применять willCacheResponse
для возврата nil
.
-Сервис размещен на AWAS Elastic Beanstalk, поэтому некоторые предположили, что это может быть проблема кэширования DNS в случае изменения IP-адреса - это кажется мне маловероятным и должно запускать сразу несколько ошибок на разных устройствах, что я никогда не видели.
-Описанный метод: didFailWithError
, мгновенно, как если бы не было подключения к Интернету на устройстве - все остальные приложения работают.
- Веб-сайт, на котором размещен API, используемый приложением, может быть просмотрен без проблем в любое время. На самом деле веб-сайт делает те же запросы на получение данных.
Код ошибки возвращен -1003, kCFURLErrorCannotFindHost
. Я слежу за потоком Git, занимающимся той же проблемой, но безрезультатно. https://github.com/AFNetworking/AFNetworking/issues/967
Я пробовал использовать NSURLRequestReloadIgnoringCacheData
для всех моих запросов, но это не помогло.
С этой информацией, кто-нибудь захочет рискнуть предположить, что я могу делать неправильно? Я добавил щедрость, потому что я понятия не имею, как подойти к этой проблеме - особенно потому, что она настолько непоследовательна. И это определенно не является допустимой ошибкой (то есть, что домен не может быть найден), поскольку служба работает нормально, пока это происходит на случайных клиентах.
Я создаю свой запрос со статическим методом, который выглядит так. Он был лишен некоторой непубличной информации, но в основном он просто выполняет запрос POST с данными JSON. [Controller getSQLHost]
просто возвращает URL-адрес базового домена.
+(NSURLConnection*)initiatePOSTwithJSONDictionary:(NSDictionary*)dictionary toURL:(NSString*)urllocation withDelegate:delegate {
NSMutableDictionary *connectionDictionary = [[NSMutableDictionary alloc] init];
if (dictionary) {
[connectionDictionary setObject:dictionary forKey:@"input"];
}
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:connectionDictionary options:kNilOptions error:nil];
NSURL *url = [NSURL URLWithString:[[Controller getSQLHost] stringByAppendingString:urllocation]];
NSString *postLength = [NSString stringWithFormat:@"%i", (int)[jsonData length]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30.0];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:jsonData];
return [[NSURLConnection alloc] initWithRequest:request delegate:delegate];
}
см. В быстром: http://iosdevcenters.blogspot.in/2015/12/nsurlrequest-in-swift.html –
@KiritModi Хотя я ценю, что вы нашли время, чтобы ответить, я не понимаю, что эта статья имеет отношение к мой вопрос? – nickdnk
Можете ли вы дать мне URL? –