2011-01-05 38 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