2012-05-10 35 views
0

好吧,我已經嘗試了很多不同的方法。我想調用一個JSON API,獲取它的響應,保存鍵值,然後用不同的參數再次調用它。最近,我嘗試在for循環中調用URL方法,當通知發佈時,在觀察者中發佈了一個NSNotification connectionDidFinishLoading:和NSLogging值。但它只記錄多次最終呼叫的值。多個NSURLConnection調用一個接一個?

我用這個連接初始化...

eventConnection=[[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]] delegate:self startImmediately:NO]; 
     [eventConnection scheduleInRunLoop: [NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
     [eventConnection start]; 

這是委託方法...

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSNotification *eventNotification=[NSNotification notificationWithName:@"eventsFound" object:nil userInfo:responseDict]; 
     [[NSNotificationQueue defaultQueue]enqueueNotification:eventNotification postingStyle:NSPostNow coalesceMask:NSNotificationCoalescingOnName forModes:nil]; 
} 

任何建議,我怎麼能做到這一點?

回答

2

設置一個計數器和發送請求的總數。並在連接完成加載後,檢查計數器是否達到要發送的請求的總數,否則再次調用您正在發送數據的方法,並遞增發送的請求。如果你使用文件中的數據。即首先將數據寫入到文件WID一個數字,然後閱讀它當u要發送請求,然後將其WUD B非常

3

爲了有效地鏈接多個NSURLConnection請求,你不應該一次啓動它們(例如,像你說的「在for循環中」)。

取而代之,開始第一個請求;然後,從connectionDidFinishLoading開始第二個;然後再次,當connectionDidFinishLoading再次執行時,啓動第三個,依此類推。

這只是你如何做到這一點的草圖,以幫助你爲你的應用找到一個好的設計;一種可能性是:

  1. 定義一個狀態機,負責根據當前狀態觸發請求; (該狀態可以是一個簡單的整數,代表您已經進行的順序步驟);

  2. 啓動狀態機:它會觸發第一個請求;

  3. 當請求完成時,connectionDidFinishLoading將發信號通知狀態機,以便它移動到下一步;

  4. 在每個步驟中,狀態機觸發對應於該步驟的請求。

當然還有其他可能的設計選擇;哪一個最好取決於你的總體需求和你需要的那種呼叫流程。

+0

[eventConnection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; [eventConnection start]; 是不是假設要依次調用api? –

+1

它們按順序啓動,如:啓動第一個;開始第二個;開始第三次...但是你想要的是在第一次*完成*之後開始第二秒(而不是簡單地在第一次開始之後)... – sergio

0

哼,

你有沒有嘗試使用圖書館像AFNetworking,您可以創建非同步請求,使用塊來處理答案。

0

您可以使用NSOPerationQueue或阻止或線程相同。完成一個後調用另一個函數。

相關問題