Отмените NSMutableRequest и метод XMLParsing ObjectiveC - PullRequest
0 голосов
/ 19 ноября 2011

Мне нужно отменить NSMutableRequest и XMLParsing, если пользователь выбирает другое представление

Я делаю это на ViewDidLoad:

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..."];
}

Я знаю, что должен: [conn cancel]; на viewWillDisappear, но как я могу проверить, происходит ли соединение, чтобы я мог его отменить?И то же самое происходит с методом разбора:

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

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

1 Ответ

1 голос
/ 19 декабря 2011

Этого можно добиться, используя два флага (BOOL переменные). Один флаг будет отслеживать активность соединения (независимо от того, выполняется ли соединение или имеет finishedLoading).

Итак, для связи (BOOL isConnectionActive) установить isConnectionActive = YES в viewDidLoad и установите его isConnectionActive = NO в connectionDidFinishLoading или connectionDidFailWithError методах делегата. и проверьте

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

in viewWillApear: метод.

аналогичное, что вы можете сделать для xmlParsing. вы установите isParsingCompleted=NO - (void)parserDidStartDocument:(NSXMLParser *)parser метод. и isParsingCompleted=YES

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

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

методов, и вы будете использовать

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

в методе viewWillApear:. [Для этого вам понадобится ссылка на уровень класса для парсера.]

Спасибо

...