iOS 中碰到tableview组合下拉刷新崩溃
来源:互联网 发布:潜艇模型 淘宝 编辑:程序博客网 时间:2024/06/02 21:19
在项目中碰到下拉刷新导致系统崩溃的情况。经过调试发现。代码并没有走过reloaddata时 但是形同崩溃了(tableview在初始化中并没有绑定数据 ,所以都是通过reloaddata方法去申请table中cell的重新绘制)因此可以说明系统在刷新数据的时候脱离了我们的管制,自己去刷新控件了,那么除了我们可以去手动刷新cell还有什么方法会导致cell重新绘制呢,猜测是代理方法。因为我发现。当屏幕不够展示说有cell的时候 系统并不会去绘制他,而是当他要显示出来的时候,系统回去绘制出来。
首先贴上一个简单tableview的代码
//// ViewController.swift// tableviewtest//// Created by 郑灵钟 on 16/8/22.// Copyright © 2016年 郑灵钟. All rights reserved.//import UIKitclass ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { let tabzlz = UITableView(frame: CGRect(x: 0, y: 0, width: 500, height: 600)) override func viewDidLoad() { super.viewDidLoad() self.tabzlz.delegate = self tabzlz.dataSource = self self.view.addSubview(tabzlz) } func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return CGFloat(200) } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 5 } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let zlzcell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "zlz") print(indexPath.row) return zlzcell }}
这是一个swft的代码。然后开始分析
一当没有刷新控件并且tableview没有弹性设置的情况下: tableview 第一个cell在最顶端时 不可以继续往下拉
二:当没有刷新控件时,tableview有弹性设置的情况下设置一个cell高度为200 用iphone测试,除了导航栏 下面可以显示2个多的cell,所以在开始进入页面时。打印出 0 1 2,
然后 然后往下拉tableview,分成两种情况: 一 轻松下拉:logcat并没有变化,二:用力下拉:logcat打印出2,。。。什么情况。。。说明用力下拉的时候,2cell 被回收了,让反弹回来的时候从新触发了tableview 的 代理 开始画view然而这时cell1 并没有被回收 所以,cell 1没有被重画,那么这个用力是个什么程度呢,目测也就 cell 1 的一半,说明,tableview在加载cell的时候会以cell的一半有没有被显示出来而去判断要不要去加载下一个cell
三:当有刷新控件,没有弹性的情况下: 刷新控件没用。
四:当有刷新控件,并且有弹性设置的情况下:
逻辑1:进入页面:触发刷新,重置数据源,加载网络数据。调用reloaddata方法:
1:容易回收cell,然而不容易触发下拉:这是什么情况 其实就是cell高度很小,然而下拉触发刷新事件需要的距离很大 会发生一种什么样情况:向下拉反弹不报错。刷新控件也没有提醒数据刷新了,还是可以不断重新画view,但加大距离触发刷新,立马崩溃,因为,数据源被重置了,
2:cell的高度大于下拉触发的距离:但是,一个屏幕显示了1.5个多的cell
算了 这么晚了 不瞎扯了 直接写上最终猜测吧:在触发tableview代理 重画cell的时候千万不要让数据源为空不然就会崩溃,显然重画的时候是我们放手的时候,下拉刷新也是我们放手的时候 所以 只要让我们放手的时候数据源不是空的程序变不会崩溃,然后 我们组装数据之前清空数据源,然后去reloaddata,,,其实还有一个办法就是别让cell重画,也就是让屏幕能显示的cell最多只有1.5个这样能保证cell不会重画。然后 程序也不会蹦了。
- iOS 中碰到tableview组合下拉刷新崩溃
- TableView下拉刷新崩溃
- IOS控件TableView下拉刷新
- iOS 刷新控件下拉刷新崩溃问题
- IOS小技巧-tableview下拉刷新
- IOS控件 Tableview 下拉刷新,加载数据
- IOS控件 Tableview 下拉刷新,加载数据
- iOS tableView 自带的下拉刷新
- iOS UITableView(十一) tableView的下拉刷新
- 关于iOS中UITableView下拉距离短刷新没事,下拉距离长就会崩溃的问题解决方案
- tableview刷新崩溃
- IOS tableView下拉刷新,上拉刷新(LOW)
- iOS中tableView的下拉刷新与上拉加载(一)
- iOS中tableView的下拉刷新与上拉加载(二)
- tableview下拉刷新
- TableView下拉刷新
- tableview下拉刷新
- 下拉刷新tableView
- 句子截图
- Redis-3.2.1主从故障测试实例 及出现sdown后没有出现try-failover 或者出现 failover-abort-not-elected 解决方法
- 配置lua环境之windows sublime Text3
- 使用ViewPager时的OOM问题解决
- windows 环境下安装 memcached
- iOS 中碰到tableview组合下拉刷新崩溃
- 自定义控件-CascadeLayout
- LeetCode: First Missing Positive
- mac的centos虚拟机(PD) 中如何找到mac主机的目录和文件?
- 今日随笔
- 闭包再学习
- PHP结合Linux的cron命令实现定时任务
- [技术拾遗] 关于堆对象释放问题
- Jquery李炎恢——41工具提示UI【7】