0

xCode4.3.2を使用しています。このプロジェクトでは、ボタンクリックで「reloadXMLdata」を呼び出すと、activityIndi​​catorが表示されません。ロードするまでに、「ハング」のように見え、数秒後にデータがいっぱいになります。ロード時までにactivityIndi​​catorを表示するにはどうすればよいですか?これを修正するために私を助けてくれませんか?

-(void)loadXML
{
    NSString *urlAddress = [NSString stringWithFormat:@"my_xml_url"];    
    NSURL *url = [NSURL URLWithString:urlAddress];
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
    [xmlParser setDelegate:self];
    BOOL success = [xmlParser parse];

    if(success)
    {
        [self.activityIndicator setHidden:TRUE];
        [self.activityIndicator stopAnimating];
        [dataTable reloadData];
    }
    else
    NSLog(@"Error!!!");
}


-(IBAction)reloadXMLdata:(id) sender
{
    [self.activityIndicator setHidden:FALSE];
    [self.activityIndicator startAnimating];
    [self loadXML];
}
4

1 に答える 1

0

問題は、呼び出し時に UI をブロックしloadXML、アクティビティ インジケーターを表示する機会がないことです。したがって、次のようにGCDを使用してみてください。

-(IBAction)reloadXMLdata:(id) sender
{
    [self.activityIndicator setHidden:FALSE];
    [self.activityIndicator startAnimating];
    [self loadXML];
}

-(void)loadXML
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSString *urlAddress = [NSString stringWithFormat:@"my_xml_url"];    
        NSURL *url = [NSURL URLWithString:urlAddress];
        NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
        [xmlParser setDelegate:self];
        BOOL success = [xmlParser parse];

        if(success) {
            dispatch_async(dispatch_get_main_queue(), ^{
                [self.activityIndicator setHidden:TRUE];
                [self.activityIndicator stopAnimating];
                [dataTable reloadData];
            });
        } else {
            NSLog(@"Error!!!");
        }
    });
}
于 2012-04-21T10:18:51.540 に答える