1

我是 Objective-C 语言的菜鸟,我有一个小问题。事实上,我有 2 个 TableView,当我从一个转到另一个时,我会解析来自 Internet 的一些 XML。解析做得很好,但我想在这两个视图之间添加一个 UIActivityIndi​​catorView 来告诉用户正在加载某些东西。因此,为此,我想在另一个线程中进行解析并在主线程中显示 UIActivityIndi​​catorView。所以这是我的代码:

- (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;
        });
    }
}

所以现在,UIActivityIndi​​cator 出现了,但是单元格是空的。当我不使用 dispatch_queue_t 时,它工作得很好。

有人有想法吗?

先感谢您!

4

1 回答 1

2

您需要重新加载表格视图(在隐藏活动指示器的同一块中):

[self.tableView reloadData]
于 2013-11-07T16:40:30.500 回答