【问题标题】:Cannot download images from an array of url's, using GCD无法使用 GCD 从一组 url 下载图像
【发布时间】:2013-07-02 10:12:43
【问题描述】:

我正在尝试使用 UICollectionView 创建一个图片库。但是 dispatch_queue 似乎没有下载图像,而是跳过下载并继续执行下一条语句。

下面是我的代码:

    for(int i=0;i<[_urlArray count];i++){
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0), ^{
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",[_urlArray objectAtIndex:i]]];

    NSData *data = [NSData dataWithContentsOfURL:url];
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    path = [path stringByAppendingString:[NSString stringWithFormat:@"%d.png",i]];
    NSLog(@"img data %@",data);
    [data writeToFile:path atomically:YES];

     UIImage *theImage=[UIImage imageNamed:path];
    [_imgArray addObject:theImage];
    dispatch_async(dispatch_get_main_queue(), ^{

    });
});
}

我什至尝试过 AFNetworking 和 SDWebImage。但没有帮助我。请帮我解决一下这个。谢谢你。

【问题讨论】:

  • 它是否执行到 NSData *data?如果它正在执行到该行,则检查数据是否存储在文档目录中。
  • 不,它根本没有下载。它跳过下一条语句。
  • 它通常会下载 dispatch_queue 将在几秒钟后执行,因此将断点放在 NSURL *url 之后的 dispatch_queue 中,它肯定会执行它不应该跳过。
  • 是的,我在尝试打印数据时得到一个空值。添加断点后,它说变量不是 NSData。
  • k 检查您获得的网址是否正确。 [NSString stringWithFormat:@"%@",[_urlArray objectAtIndex:i] 这个字符串你复制粘贴到浏览器中,然后在浏览器中加载url,检查图片是否存在。

标签: ios6 uicollectionview image-caching


【解决方案1】:

您是否尝试将所有数据和图像从 URL 存储到 iOS 缓存或任何数据库

【讨论】:

  • 感谢您的回复。不,我没有缓存它。它只是解析远程 json 文件并将图像 url 存储到数组中。从我的代码中可以看出,urlArray 用于将 url 作为字符串传递给 NSURL。
  • Hmmmm .. 我已经经历过这种 dispatch_queue 问题所以,我认为你应该将你的主要代码...添加到 dispatch_async(dispatch_get_main_queue(), ^{ UIImage *theImage=[UIImage imageNamed :path]; [_imgArray addObject:theImage]; });因为你的代码似乎不完整..我不确定,但你应该试试这个..祝你好运
  • 你有什么建议?我什至尝试过 SDWebImage,但从数组内的第一个 url 下载。而且它从不尝试从其他网址下载。
  • 你能告诉我哪一部分代码放在这里 dispatch_async(dispatch_get_main_queue() ??
  • 我的网址空间很小,因此它正在跳过代码。现在已修复。谢谢哥们:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
相关资源
最近更新 更多