UIScrollView setContentOffset: анимированные должны использоваться только из основного потока - PullRequest
0 голосов
/ 06 марта 2019

Я выполняю действие на панели вкладок, т. Е. (Когда кнопка дважды нажата), оно должно выполнить,

[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 animated: YES];

(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 голосов
/ 13 марта 2019

Как отметил Джон Роуз, строка просмотра прокрутки:

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

и линия UIrefreshcontrol:

[root.refreshControl endRefreshing]; были основным конфликтом.

Все, что нужно было сделать, это удалить строку UIrefreshcontrol и добавить не зависящую от интерфейса строку [root RefreshView];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...