在开始之前先上一张效果图

相信大家都看到了“店铺优惠”这一栏,在这里假设这一栏就是单独的一个cell,当无店铺优惠的时候不可点击在有店铺优惠的时候会弹出优惠列表,选中并返回时会刷新数据,所以弹出视图采用的是懒加载的方式,而且刷新页面的方式采用的不是 tableView 的 reloadData 来刷新整个列表而是采用刷新单行的方式 reloadRowsAtIndexPaths: withRowAnimation:

然而令我惊呆的事情出现了,在存在店铺优惠多次点击弹出框的时候本来选中的优惠列表里面的选中数据居然发生了变化,导致返回来的数据也在不断地改变,本来是一次愉快的选择却发生了这么不可预测的事情,思前想后也没找到问题的所在,最后不得不在这个刷新方式上试着看能不能找到问题

事情果然不出我的所料在懒加载弹出框视图的时候居然创建了两次,不多不少,就是两次,于是我就在想肯定是复用的地方出问题了,但是看了代码并没有觉的有什么问题,但是也习惯性的打了个断点看看到底是怎么走的,然而事情的发展超出了预料的结果,在cell已经创建过的前提下在刷新的时候居然又创建了一个新的cell,于是狠下心来将刷新方法换成 reloadData ,这次就没有问题了,最后确定了还是 reloadRowsAtIndexPaths: withRowAnimation: 搞的鬼

查阅了资料以后得知 reloadRowsAtIndexPaths: withRowAnimation: 在刷新的时候会有cell进入和移出的动画, 所以同时需要至少两个可用的的cell(包括复用池中的cell),而 reloadData 会先将所有cell都先放到复用池中, 然后再从复用池中取可以复用的cell
这下真相大白了

作者:初光夫

tableView刷新中的问题的更多相关文章

  1. iOS tableView刷新

    下面是我对AFN刷新一个简单的封装我们只需要传过去一个tableView就好了 简化了一些代码 #import <Foundation/Foundation.h> typedef NS_E ...

  2. ios开发之--tableview刷新某一个区和某一行

    在开发中,有时候,我们不需要刷新整个表,只需要刷新局部数据即可,具体代码如下: //section刷新 NSIndexSet *indexSet=[[NSIndexSet alloc]initWith ...

  3. TableView刷新指定的cell 或section

    //一个section刷新 NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:]; [tableview reloadSections:ind ...

  4. tableview 刷新 @property属性的用法

    1.tableView的刷新1> 数据刷新的总体步骤* 修改模型数据* 刷新表格(刷新界面) 2> 刷新表格(刷新界面)的方法* 全局刷新(每一行都会重新刷新)- (void)reload ...

  5. collectionView/tableview刷新时关闭动画无效

    collectionView/tableview reloadSections/reloaddata时去掉动画无效时可以尝试使用 [UIView performWithoutAnimation:^{ ...

  6. tableview刷新某个区域(section)或者某一行(row)

    //一个section刷新 NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:2]; [tableview reloadSections:in ...

  7. 关于tableView刷新

    UITabelView的局部刷新 1. 刷新整个tableView用[self.tableView reloadData]; 2. [self.tableView reloadRowsAtIndexP ...

  8. TableView刷新 局部刷新等

    1.对整个页面刷新 [ tableView reloadData]; 2.对某一个section刷新 NSIndexSet *indexSet=[[NSIndexSet alloc]initWithI ...

  9. tableView刷新指定的cell 或section和滚动到指定的位置

    转自:http://blog.csdn.net/tianyou_code/article/details/54426494 //一个section刷新 NSIndexSet *indexSet=[[N ...

随机推荐

  1. linux三剑客正则表达式

    ^:以...开头,^d,意思是以d开头.例如:ls  -F(-p) | grep " ^d " $:以...结尾,/$,意思是以/结尾.例如:ls -F(-p) | grep &q ...

  2. Yii2.0学习--目录结构

    目录结构: 创建一个控制器: <?php /** * Created by Haima. * Author:Haima * QQ:228654416 * Date: 2018/8/23 * Ti ...

  3. hdu 6301

    Distinct Values Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  4. Java中对象方法的调用过程&动态绑定(Dynamic Binding)

    Java面向对象的最重要的一个特点就是多态, 而多态当中涉及到了一个重要的机制是动态绑定(Dynamic binding). 之前只有一个大概的概念, 没有深入去了解动态绑定的机理, 直到很多公司都问 ...

  5. MySQL 的MAC终端一些指令总结

    开启MySQL服务 sudo /usr/local/mysql/support-files/mysql.server start 关闭MySQL服务 udo /usr/local/mysql/supp ...

  6. HDU 3488 KM Tour

    参考题解 这题注意有重边.. #include <cstdio> #include <cstring> #include <algorithm> using nam ...

  7. 02_ThreadLocal语法与源码分析

    文章导读: 早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程 ...

  8. tomcat6-servlet规范对接 与 ClassLoader隔离

    之前写的一个ppt 搬到博客来

  9. 正在创建模型,此时不可使用上下文“的解决办法。 正在创建模型,此时不可使用上下文。如果在 OnModelCreating 方法内使用上下文或如果多个线程同时访问同一上下文实例,可能引发此异常。请注意不

    //默认为: Database.SetInitializer<testContext>(null);//这里报错, 检查原因:catch(Exception ex) 错误提示: 基础连接未 ...

  10. ajax对象的获取及其常用属性

    ajax对象的获取及其常用属性 (1)什么是ajax asynchronous javascript and xml(异步的javascript和xml). 是一种用来改善用户体验的技术,其实质是利用 ...