iOS UITableView reloadData问题总结

本文总结了在iOS开发中遇到UITableView reloadData方法无效或不执行的问题,包括未设置代理、非主线程刷新数据、数据源变更不在主线程以及在错误的对象上调用reloadData等常见原因,并提供了相应的解决方案。通过理解这些问题,有助于提升iOS应用中表格视图的正确刷新与更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iOS UITableView reloadData 方法 无效,或者不执行,导致 TableView 不刷新 原因。

转载 http://www.cnblogs.com/zxykit/p/5664192.html 人家总结的很到位

reloadData不执行有好多总情况

1.没有实现代理,这是最最基本的


_tableView.dataSource=self;

_tableView.delegate=self;


2.reloadData 方法要在主线程执行。好多情况请求远程数据,是在其他线程请求的,所以直接在数据回调处 执行reloadData方法,导致 reloadData无效

3.change the dataSource  in the mainThread(改变数据源,也在主线程执行),不然reloadData也会无效,所以,远程得到数据后可以这样,在主线程改变数据,数组的修改也可以放到 setList 方法里


dispatch_async(dispatch_get_main_queue(), ^{

                //resultString 是返回的数据

                dict = [NSJSONSerialization JSONObjectWithData:[resultString dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableLeaves error:nil];

                

                BOOL resultFlag=[[dict objectForKey:@"flag"] boolValue];

                if(resultFlag){

                    [self setList];

                }else//失败 提示原因

                    [SVProgressHUD dismiss];

                    [GlobalTool showToast:server_error];

                }

            });


4.reloadData方法要在包含tabview的 当前对象调用。什么意思呢,举个例子(我犯的错误),在MyViewController 中放置了 TabView 同时引用了 自定义的View myView;myView中调用 [MyViewController setList]:

MyViewController myViewController=[[MyViewController alloc] init];

[myViewController setList];  //setList 方法中调用的reloadData

reloadData 气人的没有执行。

冷静分析了一下 我调用方式有问题,[myViewController setList],myViewController已经是new 的一个新对象 和已经展示的MyViewController没半毛钱关系,所以我需要在 自定义的myView中拿到当前的MyViewController 然后执行[myViewController setList],就可以了;


总结:还是自己基础没有打好,对于指针的引用会犯低级错误,明明是A ViewController中的TabView 我偏偏new了一个B ViewController 执行reloadData,所以没有效果;还有为什么,建议数据源的改变也放到主线程,也是处于数据安全的考虑,子线程 不知道什么时候把数据更换了,UI线程都不知道,有时间多看看基础的知识,会有意外收货

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值