2016-07-08 33 views
0

我有表格视图,从SQL数据库中加载新的数据(取决于页面)。问题是,当我在主线程中加载它时,它会阻塞UI一段时间。当我尝试在后台执行“努力工作”,并在主线程中重新加载数据时,奇怪的事情开始发生,例如,表视图节头在错误的地方移动,并且我加载了大量的数据。上传新项目表格视图

第一种情况,因为虽然所有的工作,但块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

你有没有尝试过这样的事情。

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它可以帮助你。