2011-11-19 106 views
0

我需要取消NSMutableRequest和XMLParsing如果用户选择另一种观点认为取消NSMutableRequest和XMLParsing方法的ObjectiveC

我做这在viewDidLoad中:在viewWillDisappear [conn cancel];

NSMutableURLRequest * req = [[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:endereco] 
                 cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20.0f]; 

conn = [NSURLConnection connectionWithRequest:req delegate:self]; 

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 

if(conn) 
{ 
    receivedData = [[NSMutableData alloc]init]; 
    [DSBezelActivityView newActivityViewForView:self.view withLabel:@"Obtendo Lista..."]; 
} 

我知道我必须,但我怎么能检查我的连接是否发生,所以我可以取消它? 而同样的情况在解析方法:

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 

    NSXMLParser * parser = [[NSXMLParser alloc]initWithData:receivedData]; 
    [parser setDelegate:self]; 
    [parser parse]; 
    [parser release]; 
    [receivedData release]; 
} 

回答

1

您可以通过使用两个标志(BOOL变量)实现这一目标。一个标志将跟踪连接活动(无论连接是否仍在进行或有finishedLoading)。

因此,对于连接(BOOL isConnectionActive) 在viewDidLoad 设置isConnectionActive = YES并将其设置在isConnectionActive = NOconnectionDidFinishLoading委托connectionDidFailWithError方法。 和检查

if(isConnectionActive) 
{ 
if(con != nil) 
{ 
[con cancel]; 
} 
    isConnectionActive=NO; 
} 
viewWillApear

:方法。

您可以为xmlParsing做类似的事情。您将设置isParsingCompleted=NO - (void)parserDidStartDocument:(NSXMLParser *)parser方法。 和isParsingCompleted=YES

- (void)parserDidEndDocument:(NSXMLParser *)parser; 

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError; 

方法,你会在viewWillApear:方法使用

if(!isParsingCompleted) 
{ 
if (parser!= nil) 
{ 
    [parser abortParsing]; 
} 
isParsingCompleted=YES; 
} 

[为此,你需要为解析器一流水平的参考。]

谢谢,