我一直在研究这个问题很长时间,我不确定如何继续尝试解决它。
我有一个简单的 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];
}