UIActivityIndicatorView freeze - PullRequest
       6

UIActivityIndicatorView freeze

0 голосов
/ 01 марта 2012

У меня есть эта функция, которая вызывает функцию для проверки информации в CMS. но UIActivityIndicatorView зависает до завершения проверки. не знаю почему.

РЕДАКТИРОВАТЬ: одна забавная вещь, я закомментировал отборщика. UIActivityIndicatorView по-прежнему заблокирован. пока я не нажал кнопку назад, потом она начала вращаться ....

Я использую раскадровку, iOS 5

-(void)showLoading
{
    [activity startAnimating];
    //loading is a label to show "File Loading"
    loading.alpha =1;
    //is a label to show a 0.3 alpha of the label
    blackOverlay.hidden =0;
    [self performSelector:@selector(updateFromInternet:) withObject:@"a" afterDelay:2];  

    //[self updateFromInternet:@"a"];
}

-(void)updateFromInternet:(NSString *)urlStr

{   

    NSString *URLString = @"http://sites.google.com/site/iphonesdktutorials/xml/Books.xml";
    NSURL *updateDataURL = [NSURL URLWithString:URLString];    

    NSMutableURLRequest *WPXMLFetchRequest = [NSMutableURLRequest requestWithURL:updateDataURL];

    self.receivedData = [NSMutableData data];
    self.updateConnection = [NSURLConnection connectionWithRequest:WPXMLFetchRequest delegate:self];

    NSLog(@"Checking update at : %@", updateDataURL);

    //[self.updateConnection cancel];
}



-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    ////NSlog(@"Receiving data");
    [self.receivedData appendData:data];
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    ////NSlog(@"Failed to receive data");
    self.receivedData = nil;
}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    ////NSlog(@"Received response from data");
    [self.receivedData setLength:0];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

    NSString *data=[[NSString alloc]initWithData:self.receivedData encoding:NSUTF8StringEncoding];
    NSLog(@"data %@",data);

    NSError *parseError = nil;
    //NSDictionary *xmlDict = [XMLReader dictionaryForXMLData:self.receivedData error:&parseError];
    self.receivedDict = [XMLReader dictionaryForXMLData:self.receivedData error:&parseError];

    [self showDataOnScrollView];
}

1 Ответ

2 голосов
/ 01 марта 2012

Вам следует немного отложить «тяжелую» функцию и дать сработать индикатору активности. попробуйте добавить 2,0, а не 2 к вашей задержке (я бы использовал гораздо меньшее значение - скажем, 0,3)

[self performSelector:@selector(updateFromInternet:) withObject:@"a" afterDelay:0.3]; 

если это не решит вашу проблему, вы должны посмотреть (или опубликовать) код, связанный с дополнительными материалами, которые есть в вашем коде, такими как: loading.alpha = 1; и blackOverlay.hidden = 0; я предполагаю, что элементы добавлены в индикатор активности

...