RestKitでリクエストを早めにキャンセルし、「DidFailWitherror」を呼び出す方法

StackOverflow https://stackoverflow.com/questions/8347846

  •  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 (操作はキャンセル)。確認できます エラーコード 適切なアクションを実行します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top