100分,新手问题,奇怪的viewDidLoad里面执行的顺序问题

look4u 2019-05-02 11:26:09
如下图,我在viewDidLoad里先调用loadDataById,再调用setupUI,发现Label的text老是不能被赋值,于是设置了断点,结果发现先执行了断点48,后执行了断点40,不是很理解,请教一下大家


于是我又把setupUI函数放到了loadDataById里面去执行,结果还是赋值不成功,还是先执行断点49,然后38,如下图


于是我又把setupUI函数放到了,POST方法(通过网络请求数据)里面,这次断点的顺序对了,但是运行后出现-[UILabel setText:] must be used from main thread only,如下图,实在是没办法了,新手,大家谁知道怎么办:

...全文
292 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
不担心 2019-05-04
  • 打赏
  • 举报
回复
这个算是比较基础的问题了,因为网络请求是异步执行的,所以你的setupUI想要等网络请求执行完成后再执行,就只能放在请求结束的回调里. 至于must be used from main thread only这个错误是因为iOS只有一个主线程,就是UI线程,主要作用就是刷新ui界面的,所以所有涉及到界面ui更新的操作都必须放在主线程里执行.因为网络请求不在主线程中执行,所以你只要把你的[self setupUI]这个语句放到主线程里执行就行了,像这样 dispatch_async(dispatch_get_main_queue(), ^{ [self setupUI]; });
look4u 2019-05-04
  • 打赏
  • 举报
回复
引用 1 楼 不担心 的回复:
这个算是比较基础的问题了,因为网络请求是异步执行的,所以你的setupUI想要等网络请求执行完成后再执行,就只能放在请求结束的回调里.
至于must be used from main thread only这个错误是因为iOS只有一个主线程,就是UI线程,主要作用就是刷新ui界面的,所以所有涉及到界面ui更新的操作都必须放在主线程里执行.因为网络请求不在主线程中执行,所以你只要把你的[self setupUI]这个语句放到主线程里执行就行了,像这样
dispatch_async(dispatch_get_main_queue(), ^{
[self setupUI];
});

感谢回答!!确实是这么回事,100分全送上,另外我发现怎么IOS板块的人气不行啊,回答问题的总是你们几个,哈哈。

29,031

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧