我試圖在連接失敗時測試我的應用程序的行爲。我正在iPad上關閉WiFi測試。當Restkit試圖調用Web服務,我得到以下錯誤:RestKit連接失敗委託
CPL[7713:6203] E restkit.network:RKRequest.m:545 Failed to send request to https://xxxxxxxx/APNS_WebService/rest/operations/initializeDevice?deviceID=c4a17f855d3cc824b174b71908480d4e505ebfb221cb4643da9270a07344c367 due to unreachable network.
的問題是,我想在處理委託的回調方法這種情況,但沒有委託方法被調用。我已經在請求上設置了委託,並且實現了requestDidFailLoadWithError,requestDidCancelLoad,requestDidTimeout和objectLoaderDidFailWithError。這些都不是所謂的。
爲什麼不是我的代表被調用?
編輯:設置裏面RKRequest.m斷點後,我看到下面的行實際上是在被執行:
[self performSelector:@selector(didFailLoadWithError:) withObject:error afterDelay:0];
然而,我的委託方法沒有得到所謂的。
此處,我設置委託:
request = [client requestWithResourcePath:[NSString stringWithFormat:@"/initializeDevice?deviceID=%@",deviceID]];
request.delegate=self;
[request sendAsynchronously];
編輯2:其實,在RKRequest.m行,我張貼以上只是調用RKRequest另一種方法,但事實並非如此。在didFailLoadWithError中放置一個斷點表明該代碼永遠不會到達。我不明白爲什麼這不起作用。
將performSelector更改爲常規方法調用會出現在表面上,以使我找到我正在查找的行爲。這會打破什麼?我想我不知道爲什麼performSelector被用來調用同一個類中的方法。
編輯3:按照要求,這裏是我的委託方法:
-(void)request:(RKRequest *)request didFailLoadWithError:(NSError *)error{
NSLog(error.domain);
NSLog([NSString stringWithFormat:@"%d",error.code]);
NSLog(error.localizedDescription);
NSLog(error.localizedFailureReason);
[request reset];
[request send];
}
謝謝,我會研究一下。 –
請參閱我的編輯。 –
你爲什麼不介入'didFailLoadWithError:'看看爲什麼不調用委託方法?它可能取決於您選擇的緩存策略... – sergio