2011-11-19 101 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; 
} 

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

謝謝,