Хорошо.
Допустим, у меня есть UITextField
, где пользователь может ввести URL-адрес, например:
http://foo.bar/foo/bar.asmx
Теперь, если приложение получит правильный URL-адрес, оно ответит NSData
с байтовым размером около 450-700 в зависимости от возвращаемых значений, значения у разных пользователей различаются. Вызов занимает около секунды или около того, и NSXMLParser
также анализирует данные в течение секунды.
Но всякий раз, когда мы вводим, например:
http://apple.com/foo/bar.asmx
Мы получаем NSData
с байтовым размером около 9700. И анализатор анализирует эти данные через бесконечность. И я понятия не имею, как выдать правильное сообщение об ошибке, когда пользователь сделал ввод в недействительный URL, в результате чего NSXMLParser
анализирует бесконечность.
Мы пытались использовать это.
в
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
xmlParser = [[NSXMLParser alloc] initWithData:myData];
[xmlParser setDelegate:self];
[xmlParser shouldResolveExternalEntities:YES];
[xmlParser parse];
[self performSelector:@selector(timeOutMyParser:) withObject:nil afterdelay:15];
[xmlParser release];
[connection release];
[myData release];
}
Теперь, что происходит с этим кодом, так это то, что executeSelector никогда не выполняется, так как он всегда выполняет анализ.
Итак, подведем итог:
Чтобы уменьшить количество ошибок, которые могут создавать наши пользователи, нам нужно прекратить текущие операции синтаксического анализатора NSXMLParser, если они будут продолжительными.
Есть ли ЛЕГКИЙ способ отменить текущую операцию синтаксического анализа?