可以说我有一个UITextField
,其中用户可以输入一个URL,例如:现在
http://foo.bar/foo/bar.asmx
,如果应用程序被供给右URL,它将与一个NSData
具有大约450 bytesize响应-700取决于返回值,这些值在用户之间有所不同。通话需要大约一秒左右的时间,并且NSXMLParser
也在一秒钟内解析数据。
但每当我们在输入例:
http://apple.com/foo/bar.asmx
我们收到的NSData
有大约9700一bytesize而且,解析器通过无限解析这个数据。而且我不知道如何在用户输入无效网址时导致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];
}
现在
,什么与此代码恰好是永远不会执行performSelector因为它的运行下去解析。
所以总结:
为了减少错误我们的用户可以创建的数量,我们需要如果他们采取长期停止我们当前的NSXMLParser解析器的操作。
是否有任何EASY方式取消当前的解析操作?
由于解析器在主线程上解析,并且主线程被解析阻塞,所以选择器永远不会被触发。我所做的是将解析放在NSOperation中,将NSOperation放在NSOperationQueue上,这将使其成为一个线程应用程序。然后你可以从线程或解析器委托方法本身调用abortParsing。 – krzyspmac 2011-06-14 08:21:00
嗯好吧,你有任何资源或例子,我可能会停止线程,如果解析操作需要很长时间? – doge 2011-06-14 08:24:15