UIImage异步未加载

时间:2015-10-17 12:12:51

标签: ios objective-c image url asynchronous

我想从网址获取图片,而我正在这样做:

for(int i = 0; i < 50; i++)
{NSString *MyURL=[NSString stringWithFormat:@"http://*********/tatoo/%@/%@%d.png" ,@"b",@"b",i+1];


    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
    dispatch_async(queue, ^(void) {
        NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:MyURL]];

                             UIImage* image = [[UIImage alloc] initWithData:imageData];
                             if (image) {
                                 dispatch_async(dispatch_get_main_queue(), ^{
                                     [tmp addObject:image];
                                 });
                             }
                             });

}

images = [[NSArray alloc]initWithArray:tmp];

Url是valide,但tmp为空。你知道这里有什么不对吗?任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

您可以使用AsyncImageView加载图像,而不会影响您的用户界面。

从中下载第三方课程 https://github.com/nicklockwood/AsyncImageView

    AsyncImageView *storeImage = [[AsyncImageView alloc]init];

 //This will load any no logo image first. If url is dead then also it will work
     storeImage.image =[UIImage imageNamed:@"no-logo.png"];


  NSString *UrlSTR = @"ANY_IMAGE_URL";
  NSURL *imageURL = [NSURL URLWithString:UrlSTR];
  storeImage.contentMode = UIViewContentModeScaleAspectFit;
  storeImage.imageURL = imageURL;

这会在背景中加载您的图片。

答案 1 :(得分:0)

异步下载尚未完成,您需要等待它们。

使用操作队列或调度组等待它们全部完成后再使用该阵列。

另请注意,您无法保证阵列中图像的任何顺序,因为您不知道每次下载需要多长时间。此外,最好不要同时启动60次下载......

答案 2 :(得分:0)

您是否在添加图像数据之前初始化了tmp?

tmp =[NSArray alloc]init];

在循环之前初始化