聊天列表在reloadData时无法成功加载数据

在项目开发的过程中遇到这样一个问题,iPhone6上聊天列表在reloadData时无法成功加载数据,但是只要手指滑动UITableView即可成功加载。

期初被该问题给困惑住了,始终没搞明白是啥问题,后在网上查询资料终找到问题之所在并解决该问题。现将问题的分析及解决方案贴出来:

1、在子线程中无法进行UI的更新,如果表象更新成功那只是一个幻象。因为在子线程中,代码执行完毕后会自动进入主线程,从而执行子线程中UI更新的函数,这个过程是非常快速的,导致大家误以为子线程可以更新UI。如果子线程一直在运行,那么主线程就无法获知子线程中更新UI的函数栈,从而无法更新UI。

2、在一些情况下能够在子线程中更新UI,这是因为在开辟线程时即可获取当前环境,比如点击按钮响应,实质上就是开辟了一个子线程,在这个子线程中能够及时对按钮的UI进行更新(例如换标题、背景等)。

综上所述,对于UI的更新要在主线程中执行。

时间: 2024-08-06 08:40:39

聊天列表在reloadData时无法成功加载数据的相关文章

django开发环境setting.py里面设置debug=false时却成功加载静态文件?

django开发环境setting.py里面设置debug=false时却成功加载静态文件?按理来说应该是加载失败的. 启动服务器,运行正常,但是静态文件如css,js,图片是无法加载的. 问题: 解答:问题在于使用的是谷歌浏览器,默认使用了缓存.导致每次访问同一个url时,都返回的是缓存里面的东西. 通过谷歌浏览器里面的开发者工具network下面的选项能禁用缓存.禁用缓存之后,则在django开发环境里面,运行 python manage.py runserver,如将DEBUG的值设为Tr

WP8_当滚动到滚动条的70%时,自动加载数据效果实现

Touch.FrameReported += Touch_FrameReported;   void Touch_FrameReported(object sender, TouchFrameEventArgs e) { // 传入null表明获取到的触控点信息是以屏幕左上角为原点的. var primaryPoint = e.GetPrimaryTouchPoint(null);   if (primaryPoint != null && primaryPoint.Action == T

瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据

瀑布流加载显示数据,在当下已经用的很普遍,尤其是我们在做网上商城时,在产品列表页面已经被普遍使用. 对于实现瀑布流布局的解决方案主要有以下两种方式: 1.对每一条显示数据使用绝对定位+浮动的方式,这样也会有一个问题----必须要知道每一条信息的具体高宽度 2.采用列布局,将每一条数据依次放置到每一列 其实两者的实现原理都是大同小异,现在我将针对第二种解决方案,用一个具体的事例来说明 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 2

Android加载数据ListView优化内存实现

问题分析 在移动端项目开发中,基于加载大数据量的原因,经常出现内存溢出的现象,那么减少内存占用,在真实开发中着实很重要,下面介绍下ListView加载数据量大时解决思路: 我们应该碰到过这样的情况,对于加载的listview,我们慢慢滑动数据时,系统加载数据没有问题,但是当加快滑动数据时,就会出现内存溢出的问题(这里不考虑分页加载方法).总结这是因为手机屏幕显示的原因,每次加载数据是有限的,慢慢滑动数据,在加载数据的同时,系统能有时间回收不用的内存,才不会暴露问题,但是,加快滑动,内存回收GC来

巧用ajax请求服务器加载数据列表时提示loading

我们利用weui.js中的weui.loading为效果,ajax的beforeSend与complete方法,做一个加载数据时会有几秒的 loading... 要在页面需要加载的JS文件: <script src="../js/libs/weui.min.js"></script> 可以去weui的文档中下载,这是它的demo:   https://weui.io/weui.js/ 这里主要讲jQuery ajax的get,查询数据时,它的结构为: $.aja

使用Jquery-easyUI的datagrid从后台加载数据不成功的解决办法

最近在用easyUI做一个注册页面总是出现从后台数加载不成功的问题,后来在一个师兄的指导下通过debug模式终于发现问题并解决了,以下记录我解决这一问题的过程.开发环境:jdk1.7,工具:eclipse,框架:spring-mvc spring-mvc的配置代码 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/sche

WinCE 调试某手写输入法时遇到的加载手写库失败的问题

调试某手写输入法时遇到的加载手写库失败的问题 在 WinCE6.0 下使用此手写输入法 SDK 做了一个单独的手写输入程序A(MFC Dialog 框架).正常情况下,可以正常使用. 此 A 程序,采用 LIB 方式加载此的手写 SDK. 在运行某一带手写输入的程序 B 后,A 程序无法运行.首先怀疑 B 程序中也使用了此手写 SDK,导致加载冲突. 但仔细想想程序 B 和程序 A 应该运行在不同的进程空间,且最后确定程序 B 并未使用此手写. 进一步测试发现,如果程序 A 先运行,再程序 B 

virtualbox安装增强功能时【未能加载虚拟光盘】

virtualbox安装增强功能时[未能加载虚拟光盘] 今天在使用Virtualbox中的Ubuntu虚拟机,想安装增强功能来实现更改分辨率,但是在安装时出错:未能加载虚拟光驱 VBoxsGuestAdditions.iso到虚拟电脑 经过折腾,最后通过互联网找到了解决方法: 进入系统在侧边找到如图加载的虚拟光驱,右击,点击弹出,然后就可正常安装增强功能了 点击安装增强功能 点击"运行" 输入登录系统的密码,点击授权,就开始自动安装了 如图,为安装界面,安装完成后按下回车键,就按照成功

ListView用法及加载数据时的闪烁问题和加载数据过慢问题

ListView介绍及添加数据时的闪烁问题 1.     ListView类 1.1 ListView常用的基本属性: (1)FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. (2) GridLines:设置行和列之间是否显示网格线.(默认为false)提示:只有在Details视图该属性才有意义. (3)AllowColumnReorder:设置是否可拖动列标头来对改变列的顺序.(默认为false)提示:只有在Details视