2013-02-13 6 views
1

Как узнать, возвращает ли NSData нуль, если нет подключения к Интернету или если изображение больше не доступно?NSData loading UIImage

это код:

NSString *str = @"http://p.twimg.com/A76-I-PCYAA75YH.jpg";//URL is broken 
NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]]; 
image = [UIImage imageWithData:imgData]; 

NSData равна нулю в двух случаях:

  1. Если Thers соединение нет интернета.
  2. Или если изображение в адресе больше не доступно.
+1

Используйте [это] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html#//apple_ref/occ/clm/NSData/dataWithContentsOfURL: options: error :) – nhahtdh

+1

Наверняка это так же просто, как проверка imgData == nil ...? Вы, должно быть, действительно спрашиваете что-то большее. Вам нужно перефразировать свой вопрос? – Todd

+0

no tod, я знаю, как проверить, нет ли нулевого объекта или нет, проблема в том, что я хочу знать, почему это нуль, потому что это не соединение или это потому, что изображение больше не доступно – Aziz

ответ

4

Попробуйте этот код.

NSURL* url = [NSURL URLWithString:@"http://imageAddress.com"]; 
NSURLRequest* request = [NSURLRequest requestWithURL:url]; 


[NSURLConnection sendAsynchronousRequest:request 
    queue:[NSOperationQueue mainQueue] 
    completionHandler:^(NSURLResponse * response, 
     NSData * data, 
     NSError * error) { 
if (!error){ 
     NSImage* image = [[NSImage alloc] initWithData:data]; 
    // do whatever you want with image 
} 

}]; 
+1

Если есть ошибка, причина будет в параметре ошибки, и вы можете предпринять соответствующие действия. – zaph

+0

это ответ :) ,, Я сделал некоторые изменения, чтобы заставить его работать, я обновлю ответ. – Aziz

0

Перед загрузкой проверьте подключение к Интернету, а затем скачайте. Вы можете проверить availaibility бушель положить состояние из

if(imgdata == nil) 
    // image is not available in server 
    else 
     // convert data into image and use 
     image = [UIImage imageWithData:imgData]; 
2

Вы должны первым испытанием для имеющейся связи сети передачи данных отдельно, см Reachability пример кода Apple.

Затем, если у вас есть сетевое подключение, вы можете продолжить и попробовать и загрузить файл. Если это не удастся, вы знаете, что это происходит не потому, что не было сетевого подключения к сети.

+0

Я собирался для этого подхода, но загружаю около 100 изображений, нужно ли каждый раз проверять изображение? плюс, что, если соединение выходит из строя после проверки и при загрузке? – Aziz

+0

Если вы беспокоитесь о контрольных накладных расходах, просто проверьте сетевое подключение при неполадке причины. Или используйте метод NSURLConnection, например 'sendAsynchronousRequest: queue: completionHandler:' и проверьте ошибку, чтобы определить сбой. Загрузка изображения из Интернета по основному потоку - это плохая идея. См. Ответ от @ Vinu1991. – zaph

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