iosmvvm实践刷新网络请求+tableview展示数据

布尔-      2022-02-08     175

关键词:

 

【实现效果】

 

 【目录结构相关】

此示例展示用的是MVVM结构形式,表述如下 

M:数据Model的存储,可以用来对属性进行处理。(即胖model概念,上图中xx万人订阅这个处理方法写在Model内)

V: View。用来统一管理控件初始化与布局。

VM:viewModel。负责网络请求及其他计算或事件处理

viewController文件夹下有一个控制器和一个MLDataView,这个view添加在控制器self.view上,然后这个控制器中其他view的初始化,添加和布局都在这个MLDataView里进行,这样把View分离整合到了一起。

MLDataViewModel里负责了网络请求,tableView代理和数据源方法的实现,及其他一些事件逻辑的封装。传统MVC一般这些代码都是放在控制器内,现在这样大量减少了控制器的代码。

MLDataModel里存储传输的数据,它也可以用来处理一些格式化的数据。如下图

这样model也可以分担一些属性的格式化处理。

 

【一些其他封装】

1.自定义MLHTTPSessionManager继承自AFHTTPSessionManager,可以在自定义的类里优雅地处理请求头,响应头或https设置相关的一些信息

2.网络请求扩展性强:自己公司的网络请求实现文件里逻辑要多得多,包括Token失效,刷新RefreshToken,网络请求错误码的拦截等。这些业务都可以根据自己的需要加入。

3.MLCustomHud弹出toast提示。实用性非常强。

4.Base文件夹下有两个类,其实企业及项目基本都会建立基类,也就是所以view都可以有一个基类,如tableView,UIlabel,UIButton,WKWebView,UITableViewCell等等,然后可以在基类中建立一些快捷方法设置属性等。

5.Category文件夹下Unicode里的代码为了实现nslog无法输出中文的问题。

6.Category下UIView+HudCount分类,用runTime对view进行引用计数。它的独有优势在于防止多个网络请求同时发生时对Loading框产生干扰,即可防止loading框重叠或提前消失。

 

PS:真正的mvvm应该是viewModel与View上的数据是双向绑定的,这里只是简单实现结构的分层,并没有实现双向绑定,双向绑定内容后期加上会再分享出来。 

 

【demo地址】 

码云:https://gitee.com/LiJinShi/MVVM_Demo

gitHub:https://github.com/LiJinShi/MVVM_Demo

 

tableview刷新闪动问题——ios11

...一个。将得到的数据,加载进来,在刷新整个商品详情的tableView。iOS11系统下,TableView调用reloadData方法,会导致整个界面跳动、闪屏现象,拖拉到某个位置,在根据接口返回数据加载刷新tableView,效果更惨。。iOS11之前系统不会... 查看详情

Flutter 最佳实践:每次发出 HTTP 请求都需要刷新 idtoken 吗?

】Flutter最佳实践:每次发出HTTP请求都需要刷新idtoken吗?【英文标题】:Flutterbestpracices:DoIneedtorefreshtheidtokeneverytimeImakeanHTTPRequest?【发布时间】:2020-02-1917:59:46【问题描述】:我正在使用Flutter开发前端UI,使用Firebase进行身份验... 查看详情

ios怎么避免tableview刷新数据错乱

参考技术A解决自定义Tableviewcell显示错乱问题要是要解决这个问题,就需要用到UITableviewCell的prepareForReuse方法cell被重用如何提前知道?重写cell的prepareForReuse官方头文件中有说明.当前已经被分配的cell如果被重用了(通常是滚动出屏... 查看详情

Swift TableView 对图像发出多个网络请求

】SwiftTableView对图像发出多个网络请求【英文标题】:SwiftTableViewmakingmultiplenetworkrequestsforimages【发布时间】:2017-10-1001:40:39【问题描述】:我在swift中有一张桌子。每当我向上和向下滚动tableview时,即使图像已经加载,它也会再... 查看详情

swiftalamofile网络请求数据更新tableview的坑

...发恼骚吧。。。今天下午为了一个Alamofire取得数据而更新TableView的问题,查了一下午的百度(360也是见鬼的一样),竟然没有一个简单明了的回答,而唯一几个比较接近答案的,说要self.tableView.reloadData(),也没有贴上代码,说要... 查看详情

ios中scrollview上面嵌套tableview,左右滑动出现数据多次刷新的问题

注意scrollView左右滑动时不要刷新数据,刚进来时一次性请求所有数据红包纪录和房源信息可以左右滑动和点击,tableView可以上下滑动,图片部分个人信息只刷新一次. 界面布局如下 查看详情

swift-rxswift的使用详解32(uitableview的使用3:刷新表格数据)

参考技术A(1)界面初始化完毕后,tableView默认会加载一些随机数据。(2)点击右上角的刷新按钮,tableView会重新加载并显示一批新数据。(3)为方便演示,每次获取数据不是真的去发起网络请求。而是在本地生成后延迟2秒返... 查看详情

为啥我在页面刷新时收到网络错误? (获取请求)

】为啥我在页面刷新时收到网络错误?(获取请求)【英文标题】:WhyamIgettinganetworkerroronpagerefresh?(getrequest)为什么我在页面刷新时收到网络错误?(获取请求)【发布时间】:2021-12-1815:49:03【问题描述】:我在useEffect()中向API发... 查看详情

爱奇艺ios移动端网络优化实践|请求成功率优化篇

...服务质量。本文将介绍爱奇艺APP对网络请求成功率优化的实践之路。导致请求失败的因素       想要优化请求成功率先来了解移动端网络请求全链条可 查看详情

iPhone应用程序编程中网络呼叫请求/响应的最佳实践[关闭]

】iPhone应用程序编程中网络呼叫请求/响应的最佳实践[关闭]【英文标题】:Bestpractisesfornetworkcallrequest/responseiniPhoneApplicationProgramming[closed]【发布时间】:2012-11-0811:08:05【问题描述】:我已经开发了3个Android和2个Iphone应用程序,因... 查看详情

使用gcd单个页面多个网络请求的情况(依次调用接口),等待所有网络请求结束后,再刷新ui

 #pragmamark-单个页面多个网络请求的情况(依次调用接口),等待所有网络请求结束后,再刷新UI-(void)loadHttpDatadispatch_group_tgroup=dispatch_group_create();dispatch_queue_tsearialQueue=dispatch_queue_create("com.h 查看详情

刷新 TableView 除了拉刷新

】刷新TableView除了拉刷新【英文标题】:RefreshTableViewexceptpulltorefresh【发布时间】:2016-06-0607:19:10【问题描述】:我使用Parse保存数据,每次向服务器添加新数据时,TableView不会刷新并获取新数据除了拉刷新之外,还有什么方法... 查看详情

删除 tableview 单元格并刷新视图控制器后刷新 tableview

】删除tableview单元格并刷新视图控制器后刷新tableview【英文标题】:Refreshtableviewafterdeleteatableviewcellandrefreshviewcontroller【发布时间】:2016-11-2101:08:01【问题描述】:顺便说一句,我需要快速回答。基本上,我有两个问题要提神。... 查看详情

tableview刷新跳动问题

_tableView.estimatedRowHeight=0;_tableView.estimatedSectionHeaderHeight=0;_tableView.estimatedSectionFooterHeight=0;  查看详情

tableview局部刷新

//一个section刷新   NSIndexSet*indexSet=[[NSIndexSetalloc]initWithIndex:2];   [tableviewreloadSections:indexSetwithRowAnimation:UITableViewRowAnimationAutomatic];   查看详情

高效刷新 TableView?

】高效刷新TableView?【英文标题】:EfficientlyrefreshingTableView?【发布时间】:2017-02-2404:54:42【问题描述】:我正在从我的NoSQLFirebase数据库中读取数据,将这些数据解析为单个组件,然后将它们显示在我的tableView中。我添加了表格... 查看详情

实现多节 TableView 的最佳实践是啥

】实现多节TableView的最佳实践是啥【英文标题】:What\'stheBestPracticeforImplementingMulti-sectionTableView实现多节TableView的最佳实践是什么【发布时间】:2012-02-0321:37:49【问题描述】:全部,我有大约3000个单词的定义要加载到TableView中。... 查看详情

使用gcd单个页面多个网络请求的情况(依次调用接口),等待所有网络请求结束后,再刷新ui

...况(依次调用接口),等待所有网络请求结束后,再刷新UI-(void)loadHttpDatadispatch_group_tgroup=dispatch_group_create();dispatch_queue_tsearialQueue=dispatch_queue_create("com.hmc.www",DISPATCH_QUEUE_SERIAL);dispatch_group_enter(group);dispatch_group_async... 查看详情