2011-01-05 19 views
1

的我有一个NSOperationQueue,在我不断添加袭击服务器和数据带来了对象的NSOperation顺序相同的数据。有没有办法将接收到的数据按照它们被解雇的顺序进行存储?例如,假设A,B和C对象以ABC的顺序添加到NSOperationQueue中。现在,三个A,B和C中的每一个都会将数据带入相应的线程。我想将结果以相同的顺序存储在数组中,以便数组的内容变为“结果A”,“结果B”和“结果C”。 请提供解决方案或指导解决此问题的正确答案。谢谢你们接收在为NSOperationQueue

编辑 - 基本上,我想设计一个自动提示组件,它汇集了来自服务器的数据(与谷歌应用程序),我想NSOperationQueue是实现这一目标的最佳方法。目前我将maxConcurrentOperationCount设置为1,但我想将它设置为1以上,因为数据非常缓慢地来自服务器。请指出对这个问题的正确解决方案或方向。由于

回答

1

给每一块数据的值,当你创建它们。您可以通过索引你的NSOperation类,当你得到回应,包裹在一个类你自己的数据,并给它的指数)

@class MyData : NSObject { 
    NSData *data; 
    uint index; 
} 

@property (nonatomic, assign) uint index; 
@property (nonatomic, copy) NSData *data; 

,然后,当你所有的操作已经返回,你应该有一个MyData对象数组。只需按索引对它们进行排序即可按初始顺序进行排序:)然后提取数据应该很简单。


我以为你不希望在同一时间:)

+0

感谢您的回复,但我使用一次一个操作。你可以提供一个解决方案,这与concurrentOperationCount = 1? thanx – Nishit 2011-01-05 16:56:08

+0

请参阅编辑部分 – Nishit 2011-01-06 11:51:36

3

只是一个操作。如果您正在使用1个运算的时间,然后简单NSURLConnection会做到这一点与NSURLRequest和委托方法。无需创建操作队列操作

更新:如果您想下载单个资源,并使用并行下载这个 - 见this question/answer

而不是使用不同的主机上您可以定义同一主机的不同NSURLRequests/NSURLConnections并添加额外的“范围” HTTP头文件来定义请求文件的数据范围。之后,所有的操作都完成了,数据被收集到数组中,然后按照范围对数据对象进行排序,并将它们连接起来。

+0

+1。您可以通过设置最大线程数大于1来进一步优化,但一次下载多个文件的效率提高似乎超过了实现它所需的逻辑+较早的iOS版本最多支持2个(可能只有1个) – donkim 2011-01-05 19:02:51

+0

请参阅编辑部分。谢谢 – Nishit 2011-01-06 11:51:18

1

你真的需要所有的结果?我想如果你正在开发一个autosuggest组件,你应该只对最后的结果感兴趣。如果是这种情况,您可以在添加上一次要处理的操作之前将“ - (void)cancelAllOperations”消息发送到您的NSOperationQueue。这样,处于等待状态的操作将被取消,正在处理的操作有机会在返回数据之前检查它们的“取消”状态。

+0

感谢您的回复。是的,我需要所有的结果,并且我希望将结果以相应的请求已添加到队列的顺序存储,即如果我键入CAR,服务器请求将按照C,CA,CAR的顺序进行,并且我希望将结果以相同的顺序存储在数组中,以便在索引0时C的结果必须存在,并在CA的索引1结果中CAR的索引2结果。谢谢 – Nishit 2011-01-06 13:15:21