4

サーバーから情報を取得するために RESTKIT Object Manager を使用しています。私の実装コードのスニペットは次のとおりです。

-(void)getObjects
{
    //Instantiate the RestKit Object Manager
    RKObjectManager *sharedManager = [RKObjectManager sharedManager];

    //show the spinner
    [self showLoading];

    //call server with the resourcepath
    [sharedManager loadObjectsAtResourcePath:self.resourcePath delegate:self];
}

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects 
{

    // handling in scenarios of empty arrays
    if ( [objects count]==0 ){
        [self hideLoading];
        if (emptyHandler){
            emptyHandler();
        }else{
            [self standardEmptyHandling];            
        }
        return;
    }

    // planned failure
    if ( [[objects objectAtIndex:0] isKindOfClass:[Failure class]]){
        NSAssert([objects count]==1,@"object returned is type failure, but there are more than one object in it");
        failureObject=[objects objectAtIndex:0];
        [self hideLoading];
        [self standardErrorHandling];
        return;
    }

    //return completion block to caller
    completionHandler(objects);

}

ただし、サーバー エラーまたは到達可能性エラーが発生し、プロセスが終了するまで長時間試行し続ける場合があります (スピナーは長時間表示されます_.

たとえば、サーバーが 20 秒以内に応答しない場合にユーザーに再試行するように警告するように、実装でタイムアウト期間を設定する方法はありますか?

4

2 に答える 2

11

これは、このプル リクエストhttps://github.com/RestKit/RestKit/pull/491で RestKit の貢献者によって解決され、次のように簡単に設定できます。

RKObjectManager *objectManager = [RKObjectManager objectManagerWithBaseURL:@"http://..."];
objectManager.client.timeoutInterval = 30.0; // 30 seconds
于 2012-03-27T10:31:50.380 に答える
1

URL 要求に対するApple のデフォルトのタイムアウトは 60 秒です。

RestKit の保留中の問題に関するディスカッションは次のとおりです。

http://groups.google.com/group/restkit/browse_thread/thread/8672eba8b1901f5d

NSTimerは簡単な方法です

#pragma mark - RKRequestDelegate
- (void)requestDidStartLoad:(RKRequest *)request {
   [NSTimer scheduledTimerWithTimeInterval:20.0
       target:self
       selector:@selector(handleRequestTimeout)
       userInfo:nil
       repeats:NO];
}
于 2011-11-30T16:10:40.860 に答える