0

我有一组 URL,用于使用 NSURLConnection 从远程服务器接收相关图像

NSURL *url = [NSURL URLWithString:URLString];
        NSMutableURLRequest *urlRequest = [NSMutableURLRequest
                                           requestWithURL:url
                                            cachePolicy:NSURLRequestUseProtocolCachePolicy
                                           timeoutInterval:2.0f];
            // Run network request asynchronously
        NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];

在委托协议中

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
   // As chuncks of the image are received, we build our data file
    [self.imageData appendData:data];
}

最后

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// All data has been downloaded, now we can set the image in the images array
_img = [UIImage imageWithData:self.imageData];
[self.imagesArray insertObject:_img atIndex:_index];
[self.imageData setLength:0];
_index = _index+ 1;
}

但接收的顺序并不总是与发送 URL 请求的顺序相同我尝试使用实例变量索引在图像数组中以相同的顺序插入这些图像,但这并不总是有效,我仍然得到无序列表,谁能指出我如何实现这一目标的正确方向。

4

2 回答 2

1

我在自己的实现中所做的是创建一个自定义的 Objective-C 对象,我将其插入到一个可变数组(我们称之为“ RemoteImageObject”)中,该数组包含图像数据它来自的 URL。

您要做的是发出请求,创建一个 RemoteImageObject 并将 URL 添加到其中,将其添加到您的数组中。

当请求返回图像数据时。在您的数组中查找您的 RemoteImageObject 并将图像数据添加到其中。

当您想要显示图像数据时,只需为每个 RemoteImageObjects 获取 imageData。

说得通?

于 2013-10-06T21:22:56.380 回答
0

一般来说,如果我要下载图像,我会依赖优秀的 AFNetworking 类。 http://afnetworking.com这提供了您正在寻找的整体行为(一个采用 UIImageView 和默认图像,另一个将只提供图像字节)

如果有一个你必须自己制作的原因,那么我会有一个下载名称字典到 NSURLConnection。这将使您能够确定哪个下载已异步完成,并对其采取正确的行动。

如果您真的是指同步交付下载对象,则一次发送一个,等待响应,然后在完成时开始下一个。

于 2013-10-06T21:37:36.513 回答