十分钟搭建主流框架:简单的网络部分

本节主题(简单的网络部分)

  • 源码地址在文章末尾
  • 达成效果


注:本文API使用HaoService数据平台

前言

  • 废话不说了,简单来说,移动网络很重要,下面让我们来实现一个简单的Demo:对网络数据的请求,并接收与展示吧。注意:是简单的!很简单的!

准备工作

1.文件目录结构示图(按照MVC分层)

  • Controller: CYXOneViewController
  • Model: CYXMenu
  • View: CYXCell

2.使用cocoapods集成第三方框架

注:这里就直接使用cocoapods插件安装第三方框架了

  • 这里要使用到的三方框架包括AFNetworking、MJExtension、SDWebImage

框架用途简介

  • AFNetworking:用于发送网络请求
  • MJExtension:用于把网络返回的JSON格式数据转换为模型属性
  • SDWebImage:用于下载网络图片

基本思路简述

1.在CYXOneViewController中使用AFNetworking发送GET请求,得到服务器返回的JSON格式的数据
2.使用MJExtension把JSON格式的数据转为模型CYXMenu对应的属性
3.在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;方法内根据索引indexPath.row把每一行Cell的Model属性传递给自定义Cell(CYXCell)
4.在自定义Cell(CYXCell)内接收模型数据并初始化Cell的内部控件
5.不要忘记在AFN框架内的GET请求成功调用的block中刷新TableView的数据

详细实现 上代码

第一步:设计模型属性(CYXMenu.h),这里的属性名根据API文档设计,本Demo只是使用了其中几个简单的

Objective-C

1

2

3

4

5

6

7

8

9

10

11

12

#import <Foundation/Foundation.h>

@interface CYXMenu : NSObject

/** 图片 */

@property (copy, nonatomic) NSString * albums;

/** 标题 */

@property (nonatomic,copy) NSString *title;

/** 材料 */

@property (nonatomic,copy) NSString *ingredients;

@end

第二步:自定义cell(这里使用Xib了)

2.1 拖控件到Xib中(见文件目录结构图)
2.2 在CYXCell.h中定义一个模型属性,用于供外界(CYXOneViewController)访问并传递模型进来。

Objective-C

1

2

3

4

5

6

7

8

9

10

#import <UIKit/UIKit.h>

@class CYXMenu;

@interface CYXCell : UITableViewCell

/** 菜单模型 */

@property (strong, nonatomic) CYXMenu * menu;

@end

2.3 在CYXCell.m中实现menu属性的- (void)setMenu:(CYXMenu *)menu方法,将取到的menu模型值给cell自身的控件赋值
由于这里需要通过URL下载网络图片,使用到了SDWebImage框架

Objective-C

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

#import "CYXCell.h"

#import "CYXMenu.h"

#import <UIImageView+WebCache.h>

@interface CYXCell ()

@property (weak, nonatomic) IBOutlet UIImageView *albumsImageView;

@property (weak, nonatomic) IBOutlet UILabel *titleLable;

@property (weak, nonatomic) IBOutlet UILabel *ingredientsLabel;

@end

@implementation CYXCell

- (void)setMenu:(CYXMenu *)menu{

_menu = menu;

// 利用SDWebImage框架加载图片资源

[self.albumsImageView sd_setImageWithURL:[NSURL URLWithString:menu.albums]];

// 设置标题

self.titleLable.text = menu.title;

// 设置材料数据

self.ingredientsLabel.text = menu.ingredients;

}

@end

第三步,到这里我们需要在CYXOneViewController.m内实现 网络数据请求/JSON数据转模型/给自定义cell传递模型数据 的操作

Objective-C

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

#import "CYXOneViewController.h"

#import "CYXCell.h"

#import "CYXMenu.h"

#import <AFNetworking.h>

#import <MJExtension.h>

@interface CYXOneViewController ()

/** 存放数据模型的数组 */

@property (strong, nonatomic) NSMutableArray * menus;

@end

@implementation CYXOneViewController

#pragma mark - 全局常量

// 发送请求URL

static NSString * const CYXRequestURL = @"http://apis.haoservice.com/lifeservice/cook/query?";

// 重用cell标识符

static NSString * const CYXCellID = @"cell";

#pragma mark - life cycle 生命周期方法

- (void)viewDidLoad {

[super viewDidLoad];

self.tableView.rowHeight = 90;

// 注册重用Cell

[self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([CYXCell class]) bundle:nil] forCellReuseIdentifier:CYXCellID];

// 调用加载数据方法

[self loadData];

self.view.backgroundColor = [UIColor whiteColor];

}

#pragma mark - private methods 私有方法

/**

*  发送请求并获取数据方法

*/

- (void)loadData{

// 请求参数(根据接口文档编写)

NSMutableDictionary *params = [NSMutableDictionary dictionary];

params[@"menu"] = @"西红柿";

params[@"pn"] = @"1";

params[@"rn"] = @"20";

params[@"key"] = @"2ba215a3f83b4b898d0f6fdca4e16c7c";

// 在AFN的block内使用,防止造成循环引用

__weak typeof(self) weakSelf = self;

[[AFHTTPSessionManager manager] GET:CYXRequestURL parameters:params success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {

NSLog(@"请求成功");

// 利用MJExtension框架进行字典转模型

weakSelf.menus = [CYXMenu objectArrayWithKeyValuesArray:responseObject[@"result"]];

// 刷新数据(若不刷新数据会显示不出)

[weakSelf.tableView reloadData];

} failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {

NSLog(@"请求失败 原因:%@",error);

}];

}

#pragma mark - UITableviewDatasource 数据源方法

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

return self.menus.count;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

CYXCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

cell.menu = self.menus[indexPath.row];

return cell;

}

#pragma mark - UITableviewDelegate 代理方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

// 点击了第indexPath.row行Cell所做的操作

}

@end

到这里只是简单实现了网络数据的请求,还有很多细节,例如下拉/上拉刷新,、cell的点击事件等等,有时间再讨论了。

附:源码github地址

  前两天在一群里看见有人推荐一个app叫问啊,就可以发题答题那种的,感觉就跟uber滴滴打车似的,一般这种软件一上来就砸钱给红包啥的,哥之前刷过uber的单有经验!试验了几次应该可以刷,把注册红包和之前领的红包钱套现,目前我提了五十多,目测还能刷更多。ps,但是尽量要问技术相关的问题,不然容易被封。
  有技术的可以自己试,不会的可以q我315414695:QQ群290551701 聚集很多互联网精英,技术总监,架构师,项目经理!开源技术研究,欢迎业内人士,大牛及新手有志于从事IT行业人员进入!

时间: 2024-10-05 13:18:25

十分钟搭建主流框架:简单的网络部分的相关文章

十分钟搭建主流框架_下拉/上拉刷新数据(OC)

本节主题(网络部分-下拉/上拉刷新) 源码地址在文章末尾 达成效果 下拉刷新数据 上拉加载更多数据 前言 经过十分钟搭建主流框架_简单的网络部分(OC)的介绍,相信你已经实现了基本的联网获取数据,但只是粗糙的获取了固定的数据,下面就让我们来实现下拉刷新和上拉加载更多吧.同样,我们先来做准备工作吧. 准备工作 Github寻找优秀的第三方刷新框架 1.前人种树,后人乘凉.有优秀的第三方框架可以使用,当然是极好的,可以大大提高我们的开发效率,如有特殊需求只能自己手写就除外了 Refresh 2.查阅

十分钟搭建App主流框架_纯代码搭建(OC),你不知道的框架

十分钟搭建App主流框架_纯代码搭建(OC),你不知道的框架java学习爱好者 2019-06-11 14:28搭建主流框架界面 需要源码的可以私信我达成效果 效果图ps :需要源码的可以加群,668041364导读 我们玩iPhone应用的时候,有没发现大部分的应用都是上图差不多的结构,下面的TabBar控制器可以切换子控制器,上面又有Navigation导航条我们本文主要是讨论主体框架的搭建,数据暂时没有添加分析做项目的基本流程 1.搭建项目主框架(1)先搭建tabBarController

十分钟搭建App主流框架

搭建主流框架界面 0.达成效果 Snip20150904_5.png 我们玩iPhone应用的时候,有没发现大部分的应用都是上图差不多的结构,下面的TabBar控制器可以切换子控制器,上面又有Navigation导航条 我们本文主要是搭建主体的框架,数据暂时没有添加 分析做项目的基本流程 1.搭建项目主框架 (1)先搭建tabBarController(下面有一条) (2)再搭建NavigationController(上面有一条,并且每个子控制器的不一样) 2.思考开发方式 (1)storyb

十分钟用Windows服务器简单搭建DHCP中继代理!!

                     十分钟用Windows服务器简单搭建DHCP中继代理!! 一.什么是中继代理? 大家都知道DHCP分配地址都需要用到IP广播,但是广播是不能在两个网段之间进行的.那么和DHCP服务器不是在同一个网段的客户机怎么获得相应的IP地址呢?这时,就要用到DHCP中继代理了. 在另一个Windows服务器上只要配备两块网卡,再安装一个简单的服务器"角色"就可以实现DHCP中继代理了! 二.实验拓补图 三.实验步骤 1.配置DHCP服务器 1.1).注意,

十分钟搭建和使用ELK日志分析系统

前言 为满足研发可视化查看测试环境日志的目的,准备采用EK+filebeat实现日志可视化(ElasticSearch+Kibana+Filebeat).题目为"十分钟搭建和使用ELK日志分析系统"听起来有点唬人,其实如果单纯满足可视化要求,并且各软件都已经下载到本地,十分钟是可以搭建一个ELK系统的.本文介绍如何快速安装.配置.使用EK+FILEBEAT去实现日志搜集.本文中没有使用LOGSTASH做日志搜集过滤,但为了后期需要先进行了安装. 工作原理 ElasticSearch:是

十年建站老司机带你十分钟搭建网站

本文概要: 1. 域名 + 域名注册 + 域名备案 + 域名解析绑定 2. 服务器 + 虚拟主机 + windows服务器 + linux服务器 3. CMS建站系统 4. 总结 在如今互联网发展迅速猛进的大环境下,网站已经成为一个企业不可缺少的网络媒介.但网站开发行业鱼龙混杂,质量参差不齐,价格更是跨越区间大.尤其对于那些在建站方面不懂的小白来说,很容易被人坑,所以作为在网站开发行业摸爬滚打多年的草根老司机,通过本文向大家分享建站的经验与心得,避免不必要的弯路和成本损耗. Come on! 小

十分钟搭建和使用sonarqube代码质量管理平台

前言 Sonarqube为静态代码检查工具,采用B/S架构,帮助检查代码缺陷,改善代码质量,提高开发速度,通过插件形式,可以支持Java.C.C++.JavaScripe等等二十几种编程语言的代码质量管理与检测.本文介绍如何快速安装.配置.使用Sonarqube及Sonarqube Scanner. 工作原理 Sonaqube-scanner:负责搜集代码相关数据 (可以理解为搜集端) Sonarqube:负责对搜集的数据进行分析,通过不同的插件算法来对这些结果进行再加工,最终以量化的方式来衡量

CentOS 6.5 十分钟搭建KVM虚拟机详细文档,从零到有,快速入门。

以下技术文档全部在我的公司服务器上成功搭建并且运行 KVM通俗的说就是一台服务器当多台用,详细介绍去百度和谷歌. 首先查看服务器是否支持虚拟化 [[email protected] ~]# grep -E '(vmx|svm)' /proc/cpuinfo --color 反馈如下:   flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov p    at pse36 clflush dts acpi mmx 

ubuntu下搭建Scrapy框架简单办法

1. 先执行以下命令 sudo apt-get install python-lxml sudo apt-get install libxslt1-dev sudo apt-get install python-setuptools sudo apt-get install libevent-dev sudo apt-get install libffi-dev sudo apt-get install python-openssl sudo apt-get install libssl-dev