ios - UIScrollView setContentOffset :animated must be used from main thread only

标签 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 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];

        });

            });
    }

最佳答案

正如 Jon Rose 所说, ScrollView 行:

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

和 UIrefresh 控制线:

[root.refreshControl endRefreshing]; 是主要冲突。

需要做的就是删除 UIrefreshcontrol 行并添加非 UI 相关行[root RefreshView];

关于ios - UIScrollView setContentOffset :animated must be used from main thread only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55021631/

相关文章:

objective-c - 是否有方便的快捷方式/工作流程来插入方括号以在 XCode 中发送消息/调用方法?

Xcode 6.3 和 Swift : Unicode Utilities (e. g。 UCKeyTranslate)不可用?

ios - 如何使用自动布局来调整 TableView 单元格中的 View 大小?

objective-c - 将 ivars 添加到 NSManagedObject 子类

objective-c - 更改 UITableViewCell 的选定状态

iOS 推送通知横幅未出现

iphone - 运行iPhone App帮助时出错-__NSCFConstantString错误含义

ios - 使用 FFMPEG 编码 iOS 兼容的 h264 音频流

ios - 清除 UIWebview 缓存

ios - 取消订阅 channel 后消息接收观察员不起作用