如何使用下载数据更新标签

时间:2015-08-14 17:05:43

标签: ios objective-c multithreading uilabel protocols

在我的模型中,数据是从for网站的for循环中下载的,并且每次使用协议方法将数据发送到我的viewController。在模型文件中;

    for(NSString* data in DataArray){

        [self.delegate passUpdatingCourse:data_name];

 //other operations
}

在我的viewController中,来自model的数据名称保存到其他线程中的NSArray属性;

    ModelClass *modelObject = [[ModelClass alloc]  init];
    [modelObject setDelegate:self];

    dispatch_queue_t otherQ = dispatch_queue_create("Q", NULL);

    dispatch_async(otherQ, ^{

        //other operations

        [self performSelectorOnMainThread:@selector(passUpdatingCourse:) withObject:nil waitUntilDone:YES];


        dispatch_async(dispatch_get_main_queue(), ^{

            [self.myIndicator stopAnimating];
            self.indicatorText.hidden = YES;
            [self.changingCourseLabel setNeedsDisplay];

        });


    });

此外,通过协议方法传输的数据是设置viewController标签;

-(void)passUpdatingCourse:(NSString *)data_in{

    self.myLabel.text = data_in;

}

当每个数据出现时,必须更新viewController中的myLabel。但事实并非如此。在我使用它的协议方法中;

NSLog(@"Data:%@",self.myLabel.text);

是的,它在控制台中显示数据,但视图中的myLabel没有变化。

我搜索了类似的问题,但无法找到解决方案。

1 个答案:

答案 0 :(得分:1)

假设你的循环在后台线程上,将你的标签更新分派给主队列(异步)。

如果您在主线程的for循环内,则在您的方法返回之前,UI中不会更新任何内容,并且在这种情况下发送不会有帮助。