UIScrollView setContentOffset:animated必须仅在主线程中使用

时间:2019-03-06 11:07:54

标签: ios objective-c xcode multithreading uikit

我正在标签栏中执行一项操作,即(两次轻按按钮时)它应该执行

[root.FeedTableView setContentOffset:CGPointZero animated:YES];

但是我无法在其中执行

dispatch_async(dispatch_get_main_queue(), ^{  
 });

什么都没发生,所以我尝试使用

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
});

,并且在这种情况下会弹出线程运行时错误,效果很好。

检查以下代码并提出补救措施,以解决发生在

的线程问题
  

[root.FeedTableView setContentOffset:CGPointZero动画:是];

(void)processBtn:(UIButton *)sender {

    NSLog(@"sender:%li",(long)sender.tag);

    if (self.selectedViewController==self.viewControllers[0] && sender.tag==1){

        NewsFeedViewController * root = [newsFeedSceneController.viewControllers firstObject];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{


    [root.FeedTableView setContentOffset:CGPointZero animated:YES];

        dispatch_async(dispatch_get_main_queue(), ^{

            if(!root.isUpdatingTableView)

            [root.refreshControl endRefreshing];

        });

            });
    }

1 个答案:

答案 0 :(得分:0)

如乔恩·罗斯(Jon Rose)所述,滚动查看线:

castShadow=false

和UIrefreshcontrol行:

[root.FeedTableView setContentOffset:CGPointZero animated:YES];是主要冲突。

所有需要做的就是删除UIrefreshcontrol行并添加不依赖UI的行[root.refreshControl endRefreshing];