4

我一直在研究这个问题很长时间,我不确定如何继续尝试解决它。

我有一个简单的 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];
}
4

0 回答 0