Как установить интервал ожидания для RESTKIT Object Manager - PullRequest
4 голосов
/ 10 октября 2011

Я использую 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 секунд?

Ответы [ 2 ]

11 голосов
/ 27 марта 2012

Это было решено участниками RestKit в этом запросе на получение https://github.com/RestKit/RestKit/pull/491 и может быть легко установлено следующим образом:

RKObjectManager *objectManager = [RKObjectManager objectManagerWithBaseURL:@"http://..."];
objectManager.client.timeoutInterval = 30.0; // 30 seconds
1 голос
/ 30 ноября 2011

Apple время ожидания по умолчанию для запросов URL равно 60 секундам.

Здесь обсуждается нерешенная проблема в RestKit:

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

A NSTimer может быть простым способом.

#pragma mark - RKRequestDelegate
- (void)requestDidStartLoad:(RKRequest *)request {
   [NSTimer scheduledTimerWithTimeInterval:20.0
       target:self
       selector:@selector(handleRequestTimeout)
       userInfo:nil
       repeats:NO];
}
...