私はこの問題に長い間取り組んできましたが、解決をどのように進めればよいかわかりません。
私は単純な ASIHTTPRequest を持っています。以下にコードを掲載します。
アプリは、最初に実行したときに常に機能します。ASIHTTPRequest を開始するためにプルして更新できるテーブル ビューがあり、問題なく何度でも更新できます。アプリをバックグラウンドに送信して元に戻すと、すべて正常に動作します。しかし、アプリを何時間も放置して戻ってくると、リクエストのタイムアウト エラーが発生することがあります。これが発生すると、更新しようとするたびにエラーが繰り返され、実際にアプリをシャットダウンして再起動しない限り、再度接続することはできません。
問題が私の URL にあるとは思いません。別のデバイスでは問題なく、あるデバイスではスタックする可能性があるためです。シミュレーターでタイムアウトエラーが発生したことはありません。
タイムアウトエラーが一度発生する理由は想像できますが、一度タイムアウトエラーが発生すると、エラーが止まらない理由がわかりません。これを修正するためにどこを見ればいいのか、どのようにデバッグすればよいのか、本当にわかりません。
現在、アプリで TestFlightLive、GoogleAnalytics、Urban Airship を使用していることに注意してください。おそらく、これらのライブラリの 1 つが私のネットワーク動作に問題を引き起こしているのでしょうか?
コードは次のとおりです。
- (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];
}