RestKit超时被忽略

时间:2012-06-12 12:58:32

标签: ios5 timeout restkit

我从我的iOS应用程序调用web服务,最多可能需要4分钟才能返回。我正在使用RestKit来调用和加载对象。我发现的是,当请求需要很长时间时,我会在~60秒后收到超时错误。我已经尝试将timeoutInterval设置为荒谬的数量,但它仍然在~60之后超时。

RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:HOSTNAME];

objectManager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES;
objectManager.client.disableCertificateValidation = YES;

//timeout
objectManager.client.timeoutInterval = 1000;

以下是对服务的调用:

- (void)loadData 
{

NSString *uid = [self retrieveFromUserDefaults:@"login_preference"];
NSString *pwd = [self retrieveFromUserDefaults:@"password_preference"];

if([uid isEqualToString:@""] || [pwd isEqualToString:@""]){
    [self stopSpinner];
    [self enableUserInterface:YES];
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Missing Settings" 
                                                    message:@"Please enter your login information in the settings."
                                                   delegate:nil 
                                          cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    return;

}


RKObjectManager* objectManager = [RKObjectManager sharedManager];
NSDictionary *params = [NSDictionary dictionaryWithObjects: 
                        [NSArray arrayWithObjects:uid, pwd, nil] 
                                                   forKeys:[NSArray arrayWithObjects:@"uid", @"pwd", nil]]; 

// Load the object model via RestKit    
[objectManager loadObjectsAtResourcePath:[@"/synchData" appendQueryParams:params] delegate:self];

}

我正在后台线程中调用webservice - 该设计中是否存在导致问题的原因?我无法想象,iOS不会让后台线程运行超过60秒?我只是想不通是什么问题。

超时是从服务器获取响应或从服务器获取WHOLE响应所需的时间吗?我正在返回一个可能非常大的json响应 - 我是否需要在超时限制内返回整个内容,或者我只需要在限制内从服务器获得任何响应?

3 个答案:

答案 0 :(得分:2)

如果我理解您的问题,解决方案将是:

- (void)request:(RKRequest *)request didFailLoadWithError:(NSError *)error

因此,当您遇到超时间隔问题时,它将被捕获此方法。

答案 1 :(得分:0)

我遇到了类似的问题,委托方法requestDidTimeout:(RKRequest*)request从未被调用过。无论我是否在RKRequest或RKClient上设置超时。

警告: 在请求上设置超时时,我看到请求不遵守设置超时 除非我也打电话给[requestObject createTimeOutTimer]

但是,我在你的实现中注意到你使用1000作为NSTimeInterval:你的意思是1000秒超时?如果你的意思是一秒= 1000毫秒,则改为1.

RestKit的默认超时为120秒,因此很可能是NSURLConnection超时。

答案 2 :(得分:0)

很长一段时间,Restkit库(版本〜= .4)仅支持在一个地方添加timeoutInterval

/**
An optional timeout interval within which the request should be cancelled.
This is passed along to RKRequest if set.  If it isn't set, it will default
to RKRequest's default timeoutInterval.
*Default*: Falls through to RKRequest's timeoutInterval
*/
@property (nonatomic, assign) NSTimeInterval timeoutInterval;

在RKResponseLoader.h

/**
The timeout interval, in seconds, to wait for a response to load.
The default value is 4 seconds.
@see [RKTestResponseLoader waitForResponse]
*/
@property (nonatomic, assign) NSTimeInterval timeout;