如何设置RESTKIT对象管理器的超时间隔

时间:2011-10-10 14:04:26

标签: objective-c ios settimeout restkit

我正在使用RESTKIT对象管理器从我的服务器获取信息。我的实现代码的片段如下:

-(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秒内没有响应,请再试一次?

2 个答案:

答案 0 :(得分:11)

这个拉取请求https://github.com/RestKit/RestKit/pull/491中的RestKit贡献者现已解决了这个问题,可以轻松设置如下:

RKObjectManager *objectManager = [RKObjectManager objectManagerWithBaseURL:@"http://..."];
objectManager.client.timeoutInterval = 30.0; // 30 seconds

答案 1 :(得分:1)

Apple URL requests默认超时为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];
}