4

私はこの問題に長い間取り組んできましたが、解決をどのように進めればよいかわかりません。

私は単純な 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];
}
4

0 に答える 0