1

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

已编辑 - 基本上,我想设计一个自动提示组件,它从服务器中获取数据(与谷歌应用程序相同),我认为 NSOperationQueue 是实现这一点的最佳方法。目前我将 maxConcurrentOperationCount 设置为 1,但我想将其设置为大于 1,因为数据来自服务器的速度非常慢。请指出这个问题的正确解决方案或方向。谢谢

4

3 回答 3

3

如果您一次使用 1 个操作,那么 simpleNSURLConnection将使用NSURLRequest和委托方法来做到这一点。无需使用操作创建操作队列

更新:如果您想下载单个资源并为此使用并行下载 - 请参阅此问题/答案

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

于 2011-01-05T18:29:28.230 回答
1

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

于 2011-01-06T12:35:18.270 回答
1

为每条数据创建一个值。您可以将索引传递给您的 NSOperation 类,当您收到响应时,将数据包装在您自己的类中并为其提供索引)

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

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

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


我假设您不想一次只进行一项操作:)

于 2011-01-05T16:40:22.077 回答