我有从SQL数据库加载新数据(取决于页面)的表视图。问题是,当我在主线程中加载它时,它会阻止UI一段时间。当我尝试在后台执行“艰苦工作”,并在主线程中重新加载数据时,奇怪的事情开始发生,例如,表视图部分标题移动到错误的位置,并且我加载了大量数据。
第一种情况,所有工作但阻止用户界面:
[self.tableView addInfiniteScrollingWithActionHandler:^{
@strongify(self)
if (!self.viewModel.isUpdating){
self.viewModel.isUpdating = YES;
[self.tableView.infiniteScrollingView startAnimating];
[self.viewModel nextPage];
[self.tableView reloadData];
self.viewModel.isUpdating = NO;
}
}];
在第二种情况下,我试图做后台工作,因为没有按预期工作:
if (!self.viewModel.isUpdating){
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//Add some method process in global queue - normal for data processing
self.viewModel.isUpdating = YES;
[self.tableView.infiniteScrollingView startAnimating];
[self.viewModel nextPage];
dispatch_async(dispatch_get_main_queue(), ^(){
//Add method, task you want perform on mainQueue
//Control UIView, IBOutlet all here
[self.tableView reloadData];
self.viewModel.isUpdating = NO;
});
//Add some method process in global queue - normal for data processing
});
}
}];
如何修改我的代码以不加载主线程,并且没有“怪异”的东西?
答案 0 :(得分:0)
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
.....
dispatch_async(dispatch_get_main_queue(), ^{
[self performSelectorOnMainThread:@selector(updateView) withObject:nil waitUntilDone:YES];
});
});
......
-(void)updateView{
[self.tableView reloadData];
self.viewModel.isUpdating = NO;
}
用户PerformSelectorOnMainThread它可以帮助你。