我想从网址获取图片,而我正在这样做:
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为空。你知道这里有什么不对吗?任何帮助将不胜感激!
答案 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];
在循环之前初始化