2015-04-17 1 views
0

У меня странная проблема в Objective C.NSURL иногда дает удаленный сервер не найдена ошибка для нескольких начальных попыток

У меня есть этот фрагмент кода. Проблема в том, что когда я запускаю приложение на Iphone или ipad в 4-5 раз, я получаю удаленный сервер не найден, и после убийства приложения 4-5 раз все идет хорошо. Сервер доступен и доступен для просмотра с мобильного Safari.

Любая помощь будет высоко оценена.

NSURL *scriptUrl = [NSURL URLWithString:@"https://www.zzzzzz-zz.zzzzzz-zzzz.com/zzzzz/"]; 
NSData *data = [NSData dataWithContentsOfURL:scriptUrl]; 
if (data) 
{ 
    //COMPAS is reachable 
    NSLog(@"Device is connected to the internet"); 
} 
else 
{ 
    //COMPAS is not reachable 
    NSLog(@"Device is connected to the internet"); 
    [self performSelectorOnMainThread:@selector(showHostAlert:) withObject:nil waitUntilDone:NO]; 
} 
+0

Как это мы можем только догадываться, что происходит. Вы уверены, что это https? Всегда ваш сервер. Правильны ли параметры URL-адреса? –

ответ

0

Моей рекомендацией было бы получить данные с использованием NSURLConnection или NSURLSession. Фабричные методы классов, такие как NSData, NSString и т. Д. С использованием содержимогоOfURL, не работают хорошо, за исключением локальных URL. Если при получении данных с удаленного URL-адреса имеется некоторая ошибка, вы не можете получить статус ошибки.

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

+0

dataWithContentsOfURL иногда возвращает NULL, даже если сервер включен. Что может быть причиной? –

+0

Вы запрашиваете данные из сети. Это может быть ЛЮБОЙ разум. Вот почему эти методы не подходят для удаленных URL-адресов. Попробуйте мое предложение и с помощью нескольких строк кода вы сможете диагностировать, какие проблемы у вас возникают при доставке данных с вашего сервера. –

0

dataWithContentsOfUrl метод для NSData доступен только для загрузки данных из локальных ресурсов.

  • Вы можете использовать объект NSUrlRequest, используя NSUrl, а затем использовать NSUrlConnection для запроса.
  • Вы также можете использовать объект NSUrlSession а

Пример Получить данные синхронно:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:serverAddress] 
           cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10]; 

[request setHTTPMethod: @"GET"]; 

NSError *requestError; 
NSURLResponse *urlResponse = nil; 

NSData *response1 = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&requestError]; 

 Смежные вопросы

  • Нет связанных вопросов^_^