0

我在应用程序中加载内容时遇到问题,我看到数据是由应用程序获取的,但图像需要很长时间才能加载,是否有可能在后文中加载图像。代码如下:

NSDictionary *dict=[discussionArray objectAtIndex:indexPath.row];
UIImageView *avatarimage = (UIImageView *)[cell viewWithTag:4];
NSString *photoStrn=[dict objectForKey:@"photo"];

 dispatch_async(dispatch_get_global_queue(0,0), ^{
                   NSString *u=[NSString stringWithFormat:@"http://%@",photoStrn];
                   NSURL *imageURL=[NSURL URLWithString:u];
                   NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
                   dispatch_sync(dispatch_get_main_queue(), ^{
                   UIImage *dpImage = [UIImage imageWithData:imageData];
                   if (dpImage==nil)
                   {
                     dpImage = [UIImage imageNamed:@"profileImage.png"];
                   }
                   avatarimage.image = dpImage;

        });

如果您想了解更多详细信息,我将提供:)

4

3 回答 3

4

您可以使用GCD来执行此操作:

dispatch_async(dispatch_get_global_queue(0,0), ^{
     for (NSDictionary *dic in discussionArray)
     {
        NSString *photoStr=[dic objectForKey:@"photo"];
        NSString * photoString=[NSString stringWithFormat:@"http://%@",photoStr];
        UIImage *dpImage =  [UIImage imageWithData: [NSData dataWithContentsOfURL:[NSURL URLWithString:photoString]]];
        if (dpImage==nil)
        {
            dpImage = [UIImage imageNamed:@"profileImage.png"];
        }
     }
});
于 2013-03-14T11:12:45.720 回答
0

在此处获取SDWebImage并将其添加到您的项目中并包含

UIImageView+WebCache.h

在类实现文件中

UIImageView *imag=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 40, 40)];
[imag setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@",[[jsonarray objectAtIndex:indexPath.row]valueForKey:@"imgurl"]]] placeholderImage:[UIImage imageNamed:@"Icon@2x.png"]];
[self.view addSubview:imag];
[imag release];

SDWebImage 对于从 URL 加载图像更有用。

希望这可以帮助 !!!

于 2013-03-14T11:07:41.413 回答
0

詹姆士,

有了这条线,

[NSData dataWithContentsOfURL:[NSURL URLWithString:photoString]]]

您在主线程上进行同步网络调用。当前线程将挂起,直到网络调用完成。

解决方案是进行异步网络调用。AFNetworking库提供了一个很好的异步加载图像的类别:UIImageView+AFNetworking

于 2013-03-14T11:08:21.647 回答