2014-01-15 59 views
0

環境: - MyViewController(相同的ViewController)序列請求Restkit 0.20

使用RKObjectManager參照AFHTTPClient* client)。

1 - 第一請求

[client setDefaultHeader:@"api_key" value:session.getApi_Key]; 
[client setDefaultHeader:@"Content-Length" value:postLength]; 
[client setDefaultHeader:@"Content-Type" value:@"application/x-www-form-urlencoded"]; 
[client setDefaultHeader:@"signature" value:signature]; 
[client setDefaultHeader:@"date" value:date]; 

[[RKObjectManager sharedManager] postObject:nil 
             path:[SMRequestFactory getTokenRequestPath] 
           parameters:[SMRequestFactory getTokenRequestParams: self.usuario.text : self.senha.text] 
            success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { **Call request 2** } 
            failure:^(RKObjectRequestOperation *operation, NSError *error) {...}]; 

2 - 第二請求

[client setDefaultHeader:@"api_key" value:session.getApi_Key]; 
[client setDefaultHeader:@"access_token" value:session.getAccessToken]; 
[client setDefaultHeader:@"signature" value:session.getSignature]; 
[client setDefaultHeader:@"date" value:session.getData]; 

[[RKObjectManager sharedManager] postObject:nil 
             path:[SMRequestFactory getLoginRequestPath] 
           parameters:[SMRequestFactory getLoginRequestParams] 
            success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { **Call request 3** } 
            failure:^(RKObjectRequestOperation *operation, NSError *error) {...}]; 

3 - 第三請求操作超時

[client setDefaultHeader:@"api_key" value:session.getApi_Key]; 
[client setDefaultHeader:@"access_token" value:session.getAccessToken]; 
[client setDefaultHeader:@"signature" value:session.getSignature]; 
[client setDefaultHeader:@"date" value:session.getData]; 

[[RKObjectManager sharedManager] getObjectsAtPath:[SMRequestFactory getUsuariosRequestPath] 
             parameters:nil 
              success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult){ } 
              failure:^(RKObjectRequestOperation *operation, NSError *error) {}]; 

如果按照順序,第三個請求:服務器接收並作出響應,但60秒後發生超時。

即使按鈕調用(不成功之前)第三個請求獲得超時如果按照序列。

當第一次調用第三個請求時起作用。

+0

你檢查服務器日誌?會議是什麼 - 特別是在標題中設置的日期?是否有其他請求正在同時進行(這可能會改變常見的頭文件)?您需要清楚服務器希望在標頭中接收的內容。 – Wain

回答

0

而不是在成功代碼塊中「排序/鏈接」您的請求,也許嘗試通過GCD異步調度來調用它?

dispatch_queue_t myQueue = dispatch_queue_create("My Queue",NULL); 
dispatch_async(myQueue, ^{ 
    // Call next request 
}); 

http://jeffreysambells.com/2013/03/01/asynchronous-operations-in-ios-with-grand-central-dispatch

+0

我相信restkit api可能有這個功能。 – user3196384

+0

是的,它可能是,也許解決它?一般來說,非同步地串聯你的請求是一個好主意。 – Dannie

+0

問題中的代碼將是異步的。 GCD不是必需的,RestKit在內部使用'NSOperationQueue'。 – Wain