NoTBleeD
NoTBleeD

Reputation: 71

dispatch_queue_t and TableView

I'm a noobie in the Objective-C language, and I have a little problem. In fact, I have 2 TableViews, and when I go from one to the other I parse some XML from the internet. The parsing is doing well, but I wanted to add an UIActivityIndicatorView between those 2 views to tell to the user that something is loading. So, to do that, I wanted to do the parsing in another thread and show the UIActivityIndicatorView in the main thread. So here's my code :

- (void)viewDidLoad
{
    [super viewDidLoad];
    UIActivityIndicatorView *activityIndicator;
    activityIndicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    activityIndicator.frame = CGRectMake(0.0, 0.0, 40.0, 40.0);
    activityIndicator.center = self.view.center;
    [self.view addSubview: activityIndicator];
    activityIndicator.startAnimating;

    dispatch_queue_t queue = dispatch_get_global_queue(0,0);

    dispatch_async(queue, ^{
        NSError *error = nil;
        //  we will put parsed data in an a array
        titles = [[NSMutableArray alloc] init];
        urls = [[NSMutableArray alloc] init];

        CXMLDocument *rssParser = [[CXMLDocument alloc] initWithContentsOfURL:[NSURL URLWithString:_emissionSelectionnee] options:0 error:&error];
        NSArray *nodes = NULL;
        nodes = [rssParser nodesForXPath:@"//rss/channel/item/title" error:nil];
        for (CXMLElement *title in nodes) {
            [titles addObject:[title stringValue]];
        }

        nodes = NULL;
        nodes = [rssParser nodesForXPath:@"//rss/channel/item/enclosure" error:nil];
        for (CXMLElement *url in nodes) {
            [urls addObject:[[url attributeForName:@"url"] stringValue]];
        }
        dispatch_sync(dispatch_get_main_queue(), ^{
            activityIndicator.stopAnimating;
        });
    }
}

So now, the UIActivityIndicator shows up, but the cells are empty.. When I do not use the dispatch_queue_t, it works well..

Does someone have an idea?

Thank you in advance!

Upvotes: 1

Views: 139

Answers (1)

Martin Ullrich
Martin Ullrich

Reputation: 100701

You need to reload your Table view (in the same block where you hide the activity indicator):

[self.tableView reloadData]

Upvotes: 2

Related Questions