【发布时间】:2013-11-18 17:27:50
【问题描述】:
我正在使用"UIImageView+AFNetworking.h",我的目标是获取一个名为imageURLArray 的URL NSArray,下载所有图片,将它们放在带有页面控件的滚动视图中。
为此,我在以下循环中一次下载一张图片,并有一个先前分配/初始化的可变数组 downloadImageArray 我存储下载的图片:
for (int i = 0; i < [imageURLArray count]; i++){
NSURL *testURL = [imageURLArray objectAtIndex:i];
NSURLRequest *testURLRequest = [[NSURLRequest alloc] initWithURL:testURL];
[placeHolderImageView setImageWithURLRequest:testURLRequest placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
NSLog(@"success");
NSLog(@"The image is %@", image);
[downloadedImageArray addObject:image]; //! the exception is thrown here - it says the object is NULL
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
NSLog(@"failed to download");
}];
}
NSLog(@"Count of images is %i", [downloadedImageArray count]) //this always returns "0"
作为我将对象添加到downloadedImageArray 的行中的注释,我得到添加到可变数组的对象为 NULL 的异常。我怀疑这是因为在下一个 URL 到位之前图像尚未完成下载,并被要求再次下载。另外,在循环之后,当我得到downloadedImageArray 的计数时,计数返回0。
我的问题是:
- 如何在循环到下一个请求以下载下一个图像之前确保一个图像已完成下载?
- 作为一种设计选择,在将它们添加到我的滚动视图之前先下载所有图像是否有意义(每个图像的宽度设置为固定),还是在滚动到它们时下载更有意义?如果是这样,我该如何实施?大多数情况下,
imageURLArray的 URL 集不超过 4 组。
谢谢!
【问题讨论】:
-
你为什么要把每张图片都分配给同一个图片视图?
-
我使用了
placeHolderImageView,因为我需要一个imageView 来调用setImageWithUrlRequest——至少这是我的理解。 -
如果您的目标是下载图像只是为了将它们存储在数组中,那么您为什么要使用图像视图呢?只需使用 AFNetworking 下载图像。它有更直接的 API 用于从远程 URL 下载文件。
-
感谢您的建议,我的目标确实是下载
UIImages(我目前正在使用AFNetworking)。但是,我不知道AFNetworking中有任何方法不需要 UIImageView 才能工作,因为它们都是[UIImageView setImageWithURL NSURL]的变体。您能否指出您在 API 中指的是哪种方法?
标签: ios iphone uiimageview uiimage afnetworking