控制NSURLConnection中接收数据的顺序?

时间:2013-10-06 21:16:01

标签: iphone ios objective-c nsurlconnection

我有一系列网址,用于使用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请求的顺序相同我尝试使用实例变量索引在图像数组中以相同的顺序插入这些图像,但这并不总是有效,我仍然得到无序的列表,任何人都可以指出我如何实现这一目标。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

有道理吗?

答案 1 :(得分:0)

一般情况下,如果我正在下载图像,我依靠优秀的AFNetworking课程。 http://afnetworking.com这提供了您正在寻找的整体行为(一个采用UIImageView,默认图像,另一个采用图像字节)

如果你有必要创建自己的原因,那么我会有一个NSURLConnection的下载名字典。这将允许您确定哪个下载已完成ASYNCHRONOUSLY,并在其上正确操作。

如果你真的是指同步传送下载对象,那么一次一个地发送它们,等待响应,然后在完成时开始下一个。