在我的模型中,数据是从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没有变化。
我搜索了类似的问题,但无法找到解决方案。
答案 0 :(得分:1)
假设你的循环在后台线程上,将你的标签更新分派给主队列(异步)。
如果您在主线程的for
循环内,则在您的方法返回之前,UI中不会更新任何内容,并且在这种情况下发送不会有帮助。