Limit czasu żądania ASIHTTPRequest
Pracuję nad tym problemem od dłuższego czasu i nie jestem pewien, jak dalej próbować go rozwiązać.
Mam prosty ASIHTTPRequest. Kod jest opublikowany poniżej.
Aplikacja zawsze działa po pierwszym uruchomieniu. Mam widok tabeli, który mogę wyciągnąć, aby go odświeżyć, który inicjuje ASIHTTPRequest, i mogę odświeżyć tyle razy, ile chcę, bez problemu. Mogę wysłać aplikację do tła i przywrócić ją, a wszystko działa prawidłowo. Ale jeśli zostawię aplikację na kilka godzin i wrócę, czasami zacznę otrzymywać błąd z przekroczeniem limitu czasu. Gdy to nastąpi, błąd będzie się powtarzał za każdym razem, gdy spróbuję go odświeżyć i nigdy nie będę mógł się ponownie połączyć bez faktycznego wyłączenia aplikacji i jej ponownego uruchomienia.
Nie wierzę, że problem dotyczy mojego adresu URL, ponieważ może on zostać zablokowany na jednym urządzeniu, gdy jest dobrze na innym urządzeniu. Nigdy nie udało mi się uzyskać błędu przekroczenia limitu czasu w symulatorze.
Mogę sobie wyobrazić, dlaczego mogę raz uzyskać błąd przekroczenia limitu czasu, ale nie mogę zrozumieć, dlaczego po uruchomieniu błąd nigdy się nie kończy. Naprawdę nie mam pojęcia, gdzie szukać rozwiązania tego problemu, ani jak mogę go debugować.
Warto zauważyć, że obecnie używam TestFlightLive, GoogleAnalytics i Urban Airship w mojej aplikacji. Być może jedna z tych bibliotek powoduje problem z moim zachowaniem sieciowym?
Oto kod:
- (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];
}