我一直在研究这个问题,我不确定如何继续尝试解决它。
我有一个简单的ASIHTTPRequest。代码发布在下面。
当我第一次运行它时,该应用程序始终有效。我有一个表格视图,我可以提取刷新,启动ASIHTTPRequest,我可以刷新任意次多的问题。我可以将应用程序发送到后台并将其恢复,一切正常。但是,如果我离开应用程序几个小时后回来,有时我会开始收到请求超时错误。一旦发生这种情况,每次我尝试刷新时都会重复该错误,并且在没有实际关闭应用程序并重新启动它的情况下我再也无法连接。
我不相信问题出在我的网址上,因为它可以卡在一台设备上,而在另一台设备上则可以。我从来没有能够在模拟器上得到超时错误。
我可以想象为什么我可能会错过一次错误,但我无法理解为什么一旦启动错误,错误永远不会停止。我真的不知道在哪里尝试解决这个问题,或者我怎么去调试它。
可能需要注意的是,我目前正在我的应用中使用TestFlightLive,GoogleAnalytics和Urban Airship。也许其中一个库导致我的网络行为出现问题?
以下是代码:
- (void)getData
{
NSURL *url = [NSURL URLWithString:@"http://www.mysite.com/appname/latestData.py?callback=?"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request setTimeOutSeconds:20.0];
[request startAsynchronous];
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
NSData *responseData = [request responseData];
DLog(@"requestFinished entered");
NSString *dataString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
// Update the data model
if (dataString != nil)
{
SBJsonParser *jsonParser = [[SBJsonParser alloc] init];
NSDictionary *dataDictionary = [jsonParser objectWithString:dataString error:NULL];
[self updateDataModel:dataDictionary];
}
[self refreshIsFinished];
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error = [request error];
// inform the user
ELog(@"Connection failed! Error - %@ %@",
[error localizedDescription],
[[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil
message:NSLocalizedString(@"CONNECTION_FAILED_MESSAGE",nil)
delegate:nil
cancelButtonTitle:NSLocalizedString(@"CLOSE",nil)
otherButtonTitles:nil];
[alertView show];
[self updateUI];
[self refreshIsFinished];
}