Я хочу ввести тайм-аут на тот случай, если потребуется слишком много времени, чтобы найти мое местоположение, отправить соответствующий URL-адрес и проанализировать xml. Это работало, когда я использовал executeSelector: withObject: afterDelay в locationManager (просто для проверки получения xml), но когда я помещал подобный код в свой анализатор, он фактически не прерывал синтаксический анализ. Я проверяю это, снизив задержку до 0,01.
Моя проблема: даже с задержкой, установленной на 0,01, он все еще ждет, пока все синтаксический анализ завершится первым, и только затем он создает alertView, закодированный в методе parsingDidTimeout.
Я попробовал это с таймером, и это не сработало так же, как выполняемый в других частях моего кода. В любом случае, он не выдает alertView и не останавливает синтаксический анализ до тех пор, пока он не завершится, независимо от того, сколько времени это займет.
Я создаю URL, который требует радиуса. Сначала я пробую маленький радиус, но если я не получаю нужные мне данные, я расширяю радиус и снова отправляю URL и снова разбираю. Вот часть моего метода StartParsing.
xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
XMLParser *parser = [[XMLParser alloc] initXMLParser];
[xmlParser setDelegate:parser];
if (!hadToExpandRadius){//meaning, only do this the first time I send out the url and parse
[self performSelector:@selector(parsingDidTimeout:) withObject:nil afterDelay:0.01];
}
//Start parsing the XML file.
BOOL success = [xmlParser parse];
if(success){
if((didNotGetTheDataYet) && (radius < 500)){
hadToExpandRadius = YES;
radius = radius + 35;
[self startParsing];//do this same method, with larger radius
}
else {
NSLog(@"No Errors");
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(parsingDidTimeout:) object:nil];}
[parser release];
}
-(void)parsingDidTimeout{
[xmlParser abortParsing];
UIAlertView *servicesDisabledAlert = [[UIAlertView alloc] initWithTitle:@"Try Later" message:@"We need a better connection. We can get the data later." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[servicesDisabledAlert show];
[servicesDisabledAlert release];
[myActivityView stopAnimating];
}
Спасибо за вашу помощь.