RestKitでリクエストを早めにキャンセルし、「DidFailWitherror」を呼び出す方法
-
27-10-2019 - |
質問
私は使っている RESTKIT 私のObjective-Cプロジェクトでは、約10秒のサービスへの呼び出しのタイムアウトを指定する必要があります。
読んだ後、RestKitがこれをサポートするようには見えないので、私の計画は次のとおりです。
- リクエストが送信されたら、タイマーを起動します
- データがロードされたら、タイマーを無効にします
これが私の問題です...
タイマーメソッドが発火した場合、リクエストをキャンセルして、以下のメソッドを手動で呼び出す必要があります。私はこれを達成する方法が100%確信していません。
いくつかのコンテキストがあります 私の他の質問, 、私のプロジェクトでRestkitがどのように実装されているか、そしてこの場合にそれが何をしているかを示しています。
あなたがこれについて私に与えることができてくれた助けを前もってありがとう。
- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error {
NSLog(@"Hit error: %@", error);
}
解決
CancelRequestSwithDelegate:Selectorを使用して、説明されたワークフローを実現できます。
- (void)cancelAfterTimeout {
[[[[RKObjectManager sharedManager] client] requestQueue] cancelRequestsWithDelegate:self];
NSError *myError = [[[NSError alloc] initWithDomain:NSPOSIXErrorDomain
code:12345 userInfo:nil] autorelease];
//feel free to customize the error code, domain and add userInfo when needed.
[self handleRestKitError:myError];
}
ただし、その委任エラーハンドラーを呼び出すのは難しいかもしれませんが、このような新しい個別のエラーハンドラーを作成することで、回避できます。
- (void)handleRestKitError:(NSError*)error {
//do something with the error
}
あなたの体を変更します didFailWithError:
方法:
- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error {
[self handleRestKitError:error]
}
他のヒント
RESTKITバージョン0.20.xでは、スケジュールされたリクエストを使用してキャンセルできます
[[RKObjectManager sharedManager]
cancelAllObjectRequestOperationsWithMethod:RKRequestMethodAny
matchingPathPattern:YOUR_PATTERN];
あなたはいつでも終わることができます:
[[RKObjectManager sharedManager].operationQueue cancelAllOperations];
各リクエストはエラーで終了します -999 (操作はキャンセル)。確認できます エラーコード 適切なアクションを実行します。
所属していません StackOverflow