2013-07-03 78 views
0

嗨我有一个从网址获取图像的问题。即时通讯从一个网络服务获取这些网址,然后加载图像1和1附加在每个网址。从url中获取图像为空值

-(void)downloadMyfriendReqImage:(NSIndexPath *)path 
{ 
    if (path.row<[arrayPendingRequests count]) { 
     NSString *str=[[arrayPendingRequests objectAtIndex:path.row]valueForKey:@"USERIMAGE"]; 
     UIImage *img = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:str]]]; 

     if (img==nil) { 
      img=[UIImage imageNamed:@"placeholder.png"]; 
     } 

     [dicPendingReqImages setObject:img forKey:str]; 
     [tblFriendRequests performSelectorOnMainThread:@selector(reloadData) withObject:@"TAG_29" waitUntilDone:NO]; 
    } 
} 

这是我用来加载图像的方式。但问题是一些图像没有得到。 img成为空值。但我在android中有相同的应用程序。它完美地加载所有这些图像。这有什么问题..任何人都可以帮助我。

回答

0

在将其转换为图像之前,检查NSData请求的结果。可能你是从服务器获取超时。

+0

感谢rply。如果它采取超时req为什么它不影响到Android的? – iDia

+0

它可能是android使用代理,反应更快?你有没有看过NSData的内容? –

+0

@iDia使用['dataWithContentsOfURL:options:error:'],而不是'dataWithContentsOfURL'(https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference .html#// apple_ref/occ/clm/NSData/dataWithContentsOfURL:options:error :)然后你可以看一下'NSError'来发现是否出了问题,如果是的话,是什么。 – Rob

0
-(void)downloadMyfriendReqImage:(NSIndexPath *)path 
{ 
    if (path.row<[arrayPendingRequests count]) { 
     NSString *str=[[arrayPendingRequests objectAtIndex:path.row]valueForKey:@"USERIMAGE"]; 
     //ADDED LINE 
     str=[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

     UIImage *img = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:str]]]; 

     if (img==nil) { 
      img=[UIImage imageNamed:@"placeholder.png"]; 
     } 

     [dicPendingReqImages setObject:img forKey:str]; 
     [tblFriendRequests performSelectorOnMainThread:@selector(reloadData) withObject:@"TAG_29" waitUntilDone:NO]; 
    } 
} 

我觉得网址包含其中NSURL无法读取空格一些字符,使其工作,你需要编码添加到字符串,我觉得应该以这种方式工作。检查的代码//ADDED LINE

+0

之前添加http://,但它在我将其粘贴到浏览器上时起作用。它不包含任何空格或东西 – iDia

+0

我尝试过。但仍然同样:( – iDia

+0

尝试将NSLog添加到URL并看到..和特殊字符也可能会产生问题.. – iphonic

0

试试这个:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
NSString *str=[[arrayPendingRequests objectAtIndex:path.row]valueForKey:@"USERIMAGE"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:str]]; 
NSURLResponse *response; 
NSError *error; 
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
if (error) { 
    // handle error 
    return; 
} 
dispatch_async(dispatch_get_main_queue(), ^{ 
    // do something with the data 
UIImage *img = [[UIImage alloc] initWithData:data]; 
}); 
});