取消当前NSXMLParser解析操作的简便方法?

| 好的。 假设我有一个“ 0”,用户可以在其中输入网址,例如:
http://foo.bar/foo/bar.asmx
现在,如果为应用程序提供了正确的URL,它将根据返回的值以
NSData
响应,其字节大小约为450-700,这取决于用户之间的值。调用大约需要一秒钟左右的时间,“ 3”也将在一秒钟之内解析数据。 但是每当我们输入例如:
http://apple.com/foo/bar.asmx
我们收到一个2字节,其字节大小约为9700。解析器通过无穷大解析此数据。而且,我不知道当用户向无效的URL输入导致how3解析为无穷大时,如何抛出正确的错误消息。 我们尝试使用它。 在里面
-(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解析器操作。 有什么简便的方法可以取消当前的解析操作?     
已邀请:
        实际调用
[xmlParser parse]
会返回一个布尔值,如果解析成功,该值为YES。否则返回NO。因此,只需接收布尔值即可。
BOOL parserSucceeded = [xmlParser parse];
解析时,如果您在XML中收到无效数据,或者要根据条件停止解析,则可以通过调用取消解析
[parser abortParsing];
您可以检查状态并采取适当的措施。
BOOL parserSucceeded = [xmlParser parse];

if (parserSucceeded) {

    // Parser Succeeded

} else {

    // Parser Failed/Aborted
}
    
        问题是ѭ8阻塞了主线程,从而锁定了所有内容。 所以代替
 -(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];

    }
我做到了
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{

xmlParser = [[NSXMLParser alloc]init];
[xmlParser setDelegate:self];
[xmlParser shouldResolveExternalEntities:YES];

[self performSelectorInBackground:@selector(someFunction) withObject:xmlParser];

[xmlParser release];
[connection release];
[myData release];

}
someFunction
是这样的。
-(void)someFunction:(NSXMLParser *)parser
{

parser = [[NSXMLParser alloc]initWithData:myData];
[parser setDelegate:self];
[parser parse];

[parser release];

}
    

要回复问题请先登录注册