2013-09-30 57 views
0

我一直在使用AFNetworking獲取同步信息,並發現當我申請multithreading時,它向服務器發送多個請求,但我只執行一個請求語句。iOS:AFNetworking中意外的重複請求

使用嗅探器應用程序可以追蹤此問題,因爲Xcode debugger無法追蹤請求。

另外,我注意到這種情況發生在互聯網連接速度變慢時。

下面是一些代碼,我執行

開始同步

 
- (void)SyncFull 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(FinishSyncFull:) 
               name:@"FinishSyncFull" object:nil]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(RemoveNotificacions:) name:@"RemoveNotificacions" object:nil]; 

    [[PivotService getInstance] sync]; 


} 

通知繼續同步

 
-(void)FinishSyncFull:(NSNotification*) Notification 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"FinishSyncFull" object:nil]; 

    if ([SyncManager getInstance] mustSync]) 
    { 

     [[FMDBHelper getInstance] RemoveDataFromTable:@"SyncInfo"]; 
     [[FMDBHelper getInstance] RemoveDataFromTable:@"SyncDetails"]; 


     [self startSyncFull]; 
    } 
} 

說明startSyncFull功能:

- (void)startSyncFull 
{ 

    [[ServiceEntity1 getInstance] sync]; 

    [[ServiceEntity2 getInstance] sync]; 

    [[ServiceEntity3 getInstance] sync]; 

(...) 
    } 
+0

您是否向所有執行請求的地方添加了斷點,以確認您確實沒有執行多個地方? – KlausCPH

+0

我證實他們沒有執行多個調試代碼。 – JosL92

回答

-2

你只能在主線程中的HTTP請求,所以你必須使用執行這種威脅每一個請求:

dispatch_sync(dispatch_get_main_queue(), ^{ 
    //Your request  
}); 

祝你好運!

+0

我在收到來自請求結果的通知之前發出新的請求。我不確定線程​​的使用情況如何,但這可能是失敗的原因。我會測試你的建議。 – JosL92

+0

你的推薦是無效的,因爲請求的主線程同步調用使frezze應用程序 – JosL92