2013-02-13 67 views
1

如何判断NSData是否返回nil,如果没有Internet连接或者图像不再可用?NSData加载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. 或者url中的图片不再可用。
+1

使用[这](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html#//apple_ref/occ/clm/NSData/dataWithContentsOfURL:选项:错误:) – nhahtdh 2013-02-13 10:00:29

+1

当然,这很容易检查imgData ==零...?你一定是真的在问更多。你需要重新提出你的问题吗? – Todd 2013-02-13 10:03:03

+0

no tod,我知道如何检查对象是否为零,问题是我想知道为什么它是零,是因为它们没有连接,或者是因为图像不再可用 – Aziz 2013-02-13 10:09:42

回答

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 2013-02-13 10:30:40

+0

这是答案:) ,,我做了一些编辑,使其工作,我会更新你的答案。 – Aziz 2013-02-13 10:48:10

0

在下载互联网连接检查并下载之前。您可以检查availaibility BU推杆

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

条件你应该首先测试可用的网络数据连接分开,看到苹果的Reachability示例代码。

然后,如果您有网络连接,则可以继续尝试并加载该文件。如果它然后失败,你知道这不是因为没有网络数据连接。

+0

我打算采用这种方法,但是我加载了大约100张图片,每次加载图片时都需要检查一下吗?加上如果检查后下载连接失败怎么办? – Aziz 2013-02-13 10:14:13

+0

如果您担心检查开销,只需检查网络连接故障以确定原因。或者使用'sendAsynchronousRequest:queue:completionHandler:''NSURLConnection'方法并检查错误以确定失败。无论如何,在主线上​​从互联网上载入图像是一个坏主意。请参阅@ Vinu1991的答案。 – zaph 2013-02-13 10:26:39