iOS cell中的倒计时以及reloadData“失效”的情形

首先先简述一下此次reloadData()失效是基于一种怎样的场景:

有A、B两个页面,A页面是一个展示所有倒计时的列表页,B页面是某个倒计时的详情页,并且当某个倒计时结束后间隔指定时间重新刷新该倒计时,并同步到详情页B页面。


CountDow.gif

关于cell倒计时的实现有兴趣的小伙伴可以参考这篇文章,作者封装了能够实现该功能的第三方库以及对其实现思路也有详细的讲解,本篇提供的demo也是基于此第三方库去实现的。

在需要倒计时的地方监听通知OYCountDownNotification,在通知里处理倒计时文本的改变以及倒计时停止后通知控制器做重新获取倒计时的操作。

@objc private func countDownNotification() {
            
        let intervalModel = OYCountDownManager.sharedManager.timeIntervalDict[self.model!.identifier]
        
        if intervalModel == nil {
            return
        }
        
        let timeInterval = OYCountDownManager.sharedManager.timeIntervalWithIdentifier(identifier: self.model!.identifier)

        let countDown = self.model!.interVal - timeInterval
        if countDown <= 0 { // 倒计时结束时回调
            
            countdownLabel.text = "开奖中"
            
            if self.delegate != nil {
                self.delegate?.countdownEnd(model: self.model!)
            }
        } else {
            countdownLabel.text = String(format: "%02d:%02d:%02d", countDown/3600, (countDown/60)%60, countDown%60)
        }
    }

获取到新的倒计时信息之后刷新列表,并且把数据同步给详情页(如果详情页在当前窗口中)

if WeakSelf!.detailVC != nil {                              
    WeakSelf!.detailVC?.updateVc(model: model)
}

之前是把上述同步数据的代码写在cellForRow(at:)里,每当给cell赋值时再去判断并同步数据。但是当用户停留在详情页时,发现详情页的数据并没有被更新。祭出断点调试技能后发现,执行了reloadData程序仅执行了tableView(_:numberOfRowsInSection:)方法,而做同步数据的方法cellForRow(at:)并没有被执行。

小朋友,你是否有很多问号,明明numberOfRowsInSection都已调用了,为什么cellForRowAt却不执行?

可能有些老司机们已经发现了问题是出在哪里,问题就出在cellForRow(at:)。看下苹果官网文档对于该方法的解释

cellForRow

简言之就是该方法所在的视图存在于活动窗口中cellForRow(at:)才会被执行。而此时用户停留在了详情页,但是cellForRow(at:)存在于A页面中,所以数据没有同步到B页面。

而且cellForRow(at:)可能会执行多次,所以把同步数据的代码写在该方法中也存在一定的合理性。

最后别忘了在适当的地方释放你创建的定时器!

demo地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 场景是这样的: APP首页是一个UITableView列表,数据源设置为全局变量dataList,点击则跳转第2页...
    蓝色小石头阅读 9,171评论 2 10
  • 怎么爱父母?故作坚强?像他们养育我一样?把所有遗忘的拾起?把丢失的爱拾起?把错过的机会拾起?怎么爱父母?怎么得到答...
    不俗小七阅读 444评论 3 11
  • 几近颓废的生活 该不该继续 吃睡吃 住过的都比你自在
    courage9869阅读 320评论 0 0
  • if(@available(iOS11.0, *)) { self.homeTableView.cont...
    小专注阅读 426评论 0 0
  • 放假第四天,跟往年一样,没有什么新鲜的事情。在这个时候,我还在想着自己应该做一些什么事情让自己以后的生活不要那...
    西塔塔阅读 183评论 0 2