接続が失敗したときのアプリの動作をテストしようとしています。Wi-FiをオフにしたiPadでテストしています。Restkit が Web サービスの呼び出しを試みると、次のエラーが発生します。
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];
}