标签:
一:Plist读取
1 /******************************************************************************/
2 一:简单plist读取
3
4 1:定义一个数组用来保存读取出来的plist数据
5 @property (nonatomic, strong) NSArray *shops;
6
7 2:使用懒加载的方式加载plist文件,并且放到数组中
8 // 懒加载
9 // 1.第一次用到时再去加载
10 // 2.只会加载一次
11 - (NSArray *)shops
12 {
13 if (_shops == nil) {
14 // 获得plist文件的全路径
15 NSString *file = [[NSBundle mainBundle] pathForResource:@"shops.plist" ofType:nil];
16
17 // 从plist文件中加载一个数组对象
18 _shops = [NSArray arrayWithContentsOfFile:file];
19 }
20 return _shops;
21 }
22
23 3:使用数组中的数据
24 // 设置数据
25 NSDictionary *shop = self.shops[index];
26 iconView.image = [UIImage imageNamed:shop[@"icon"]];
27 nameLabel.text = shop[@"name"];
28
29 /******************************************************************************/
二:字典转模型
1 二:字典转模型
2
3 1:创建一个model类并且在里面创建对应的模型属性
4 /** 名字 */
5 @property (nonatomic, strong) NSString *name;
6 /** 图标 */
7 @property (nonatomic, strong) NSString *icon;
8
9
10 2:定义一个数组用来保存读取出来的plist数据
11 @property (nonatomic, strong) NSMutableArray *shops;
12
13
14 3:使用懒加载的方式加载plist文件,并且放到模型中
15
16 // 懒加载
17 // 1.第一次用到时再去加载
18 // 2.只会加载一次
19 - (NSMutableArray *)shops
20 {
21 if (_shops == nil) {
22 // 创建"模型数组"
23 _shops = [NSMutableArray array];
24
25 // 获得plist文件的全路径
26 NSString *file = [[NSBundle mainBundle] pathForResource:@"shops.plist" ofType:nil];
27
28 // 从plist文件中加载一个数组对象(这个数组中存放的都是NSDictionary对象)
29 NSArray *dictArray = [NSArray arrayWithContentsOfFile:file];
30
31 // 将 “字典数组” 转换为 “模型数据”
32 for (NSDictionary *dict in dictArray) { // 遍历每一个字典
33 // 将 “字典” 转换为 “模型”
34 Shop *shop = [[Shop alloc] init];
35 shop.name = dict[@"name"];
36 shop.icon = dict[@"icon"];
37
38 // 将 “模型” 添加到 “模型数组中”
39 [_shops addObject:shop];
40 }
41 }
42 return _shops;
43 }
44
45
46 4:使用模型中的数据
47 // 设置数据
48 Shop *shop = self.shops[index];
49 iconView.image = [UIImage imageNamed:shop.icon];
50 nameLabel.text = shop.name;
51
52
53 /******************************************************************************/
三:字典转模型疯转
1 二:字典转模型封装
2
3 1:创建一个model类并且在里面创建对应的模型属性,定义两个模型方法
4 /** 名字 */
5 @property (nonatomic, copy) NSString *name;
6 /** 图标 */
7 @property (nonatomic, copy) NSString *icon;
8
9 /** 通过一个字典来初始化模型对象 */
10 - (instancetype)initWithDict:(NSDictionary *)dict;
11
12 /** 通过一个字典来创建模型对象 */
13 + (instancetype)shopWithDict:(NSDictionary *)dict;
14
15
16 2:模型方法的实现
17 - (instancetype)initWithDict:(NSDictionary *)dict
18 {
19 if (self = [super init]) {
20 self.name = dict[@"name"];
21 self.icon = dict[@"icon"];
22 }
23 return self;
24 }
25
26 + (instancetype)shopWithDict:(NSDictionary *)dict
27 {
28 // 这里要用self
29 return [[self alloc] initWithDict:dict];
30 }
31
32 3:定义一个数组用来保存读取出来的plist数据
33 @property (nonatomic, strong) NSMutableArray *shops;
34
35
36 4:使用懒加载的方式加载plist文件,并且放到模型中
37 // 懒加载
38 // 1.第一次用到时再去加载
39 // 2.只会加载一次
40 - (NSMutableArray *)shops
41 {
42 if (_shops == nil) {
43 // 创建"模型数组"
44 _shops = [NSMutableArray array];
45
46 // 获得plist文件的全路径
47 NSString *file = [[NSBundle mainBundle] pathForResource:@"shops.plist" ofType:nil];
48
49 // 从plist文件中加载一个数组对象(这个数组中存放的都是NSDictionary对象)
50 NSArray *dictArray = [NSArray arrayWithContentsOfFile:file];
51
52 // 将 “字典数组” 转换为 “模型数据”
53 for (NSDictionary *dict in dictArray) { // 遍历每一个字典
54 // 将 “字典” 转换为 “模型”
55 XMGShop *shop = [XMGShop shopWithDict:dict];
56
57 // 将 “模型” 添加到 “模型数组中”
58 [_shops addObject:shop];
59 }
60 }
61 return _shops;
62 }
63
64
65 5:使用模型中的数据
66 // 设置数据
67 XMGShop *shop = self.shops[index];
68 iconView.image = [UIImage imageNamed:shop.icon];
69 nameLabel.text = shop.name;
70
71
72 /******************************************************************************/
四:自定义View
1 四:自定义View
2
3 1:创建一个model类并且在里面创建对应的模型属性,定义两个模型方法
4 /** 名字 */
5 @property (nonatomic, copy) NSString *name;
6 /** 图标 */
7 @property (nonatomic, copy) NSString *icon;
8
9 /** 通过一个字典来初始化模型对象 */
10 - (instancetype)initWithDict:(NSDictionary *)dict;
11
12 /** 通过一个字典来创建模型对象 */
13 + (instancetype)shopWithDict:(NSDictionary *)dict;
14
15
16 2:模型方法的实现
17 - (instancetype)initWithDict:(NSDictionary *)dict
18 {
19 if (self = [super init]) {
20 self.name = dict[@"name"];
21 self.icon = dict[@"icon"];
22 }
23 return self;
24 }
25
26 + (instancetype)shopWithDict:(NSDictionary *)dict
27 {
28 // 这里要用self
29 return [[self alloc] initWithDict:dict];
30 }
31
32
33 3:自定义一个View,引入模型类,并且创建模型类的属性
34
35 @class XMGShop;
36
37 /** 商品模型 */
38 @property (nonatomic, strong) XMGShop *shop;
39
40
41 4:实现文件中,定义相应的控件属性
42 /** 图片 */
43 @property (nonatomic, weak) UIImageView *iconView;
44
45 /** 名字 */
46 @property (nonatomic, weak) UILabel *nameLabel;
47
48 5:实现自定义View的相应方法
49 - (instancetype)init
50 {
51 if (self = [super init]) {
52 // 添加一个图片
53 UIImageView *iconView = [[UIImageView alloc] init];
54 [self addSubview:iconView];
55 self.iconView = iconView;
56
57 // 添加一个文字
58 UILabel *nameLabel = [[UILabel alloc] init];
59 nameLabel.textAlignment = NSTextAlignmentCenter;
60 [self addSubview:nameLabel];
61 self.nameLabel = nameLabel;
62 }
63 return self;
64 }
65
66 /**
67 * 这个方法专门用来布局子控件,设置子控件的frame
68 */
69 - (void)layoutSubviews
70 {
71 // 一定要调用super方法
72 [super layoutSubviews];
73
74 CGFloat shopW = self.frame.size.width;
75 CGFloat shopH = self.frame.size.height;
76
77 self.iconView.frame = CGRectMake(0, 0, shopW, shopW);
78 self.nameLabel.frame = CGRectMake(0, shopW, shopW, shopH - shopW);
79 }
80
81 -(void)setShop:(XMGShop *)shop
82 {
83 _shop = shop;
84
85 self.iconView.image = [UIImage imageNamed:shop.icon];
86 self.nameLabel.text = shop.name;
87 }
88 6:定义一个数组用来保存读取出来的plist数据
89 @property (nonatomic, strong) NSMutableArray *shops;
90
91 7:使用懒加载的方式加载plist文件,并且放到模型中
92 // 懒加载
93 // 1.第一次用到时再去加载
94 // 2.只会加载一次
95 - (NSMutableArray *)shops
96 {
97 if (_shops == nil) {
98 // 创建"模型数组"
99 _shops = [NSMutableArray array];
100
101 // 获得plist文件的全路径
102 NSString *file = [[NSBundle mainBundle] pathForResource:@"shops.plist" ofType:nil];
103
104 // 从plist文件中加载一个数组对象(这个数组中存放的都是NSDictionary对象)
105 NSArray *dictArray = [NSArray arrayWithContentsOfFile:file];
106
107 // 将 “字典数组” 转换为 “模型数据”
108 for (NSDictionary *dict in dictArray) { // 遍历每一个字典
109 // 将 “字典” 转换为 “模型”
110 XMGShop *shop = [XMGShop shopWithDict:dict];
111
112 // 将 “模型” 添加到 “模型数组中”
113 [_shops addObject:shop];
114 }
115 }
116 return _shops;
117 }
118
119
120 8:使用View
121 // 创建一个商品父控件
122 XMGShopView *shopView = [[XMGShopView alloc] init];
123 shopView.frame = CGRectMake(shopX, shopY, shopW, shopH);
124 // 将商品父控件添加到shopsView中
125 [self.shopsView addSubview:shopView];
126
127 /**
128
129 NSDictionary *dict = nil; // 从其他地方加载的字典
130
131 XMGShop *shop = [XMGShop shopWithDict:dict];
132
133 XMGShopView *shopView = [[XMGShopView alloc] init];
134 shopView.shop = shop;
135 shopView.frame = CGRectMake(0, 0, 70, 100);
136 [self.view addSubview:shopView];
137
138
139 // 扩展性差
140 // 扩展好的体现:即使改变了需求。我们也不需要动大刀子
141 */
142
143 /******************************************************************************/
五:initWithFrame
1 五:initWithFrame
2 1:在上一步的基础上只要修改init方法为
3 /** init方法内部会自动调用initWithFrame:方法 */
4 - (instancetype)initWithFrame:(CGRect)frame
5 {
6 if (self = [super initWithFrame:frame]) {
7 // 添加一个图片
8 UIImageView *iconView = [[UIImageView alloc] init];
9 [self addSubview:iconView];
10 self.iconView = iconView;
11
12 // 添加一个文字
13 UILabel *nameLabel = [[UILabel alloc] init];
14 nameLabel.textAlignment = NSTextAlignmentCenter;
15 [self addSubview:nameLabel];
16 self.nameLabel = nameLabel;
17 }
18 return self;
19 }
20
21
22 2:最后设置数据的时候也可以使用下面的方法实现View的创建
23 XMGShopView *shopView = [[XMGShopView alloc] initWithFrame:CGRectMake(shopX, shopY, shopW, shopH)];
24
25
26 /******************************************************************************/
六:MVC
1 六:MVC
2
3 1:model
4 @interface XMGShop : NSObject
5 /** 名字 */
6 @property (nonatomic, copy) NSString *name;
7 /** 图标 */
8 @property (nonatomic, copy) NSString *icon;
9 /** 通过一个字典来初始化模型对象 */
10 - (instancetype)initWithDict:(NSDictionary *)dict;
11
12 /** 通过一个字典来创建模型对象 */
13 + (instancetype)shopWithDict:(NSDictionary *)dict;
14 @end
15
16
17 @implementation XMGShop
18
19 - (instancetype)initWithDict:(NSDictionary *)dict
20 {
21 if (self = [super init]) {
22 self.name = dict[@"name"];
23 self.icon = dict[@"icon"];
24 }
25 return self;
26 }
27
28 + (instancetype)shopWithDict:(NSDictionary *)dict
29 {
30 // 这里要用self
31 return [[self alloc] initWithDict:dict];
32 }
33
34 @end
35
36
37 2:view
38 @class XMGShop;
39
40 @interface XMGShopView : UIView
41 /** 商品模型 */
42 @property (nonatomic, strong) XMGShop *shop;
43
44 - (instancetype)initWithShop:(XMGShop *)shop;
45 + (instancetype)shopViewWithShop:(XMGShop *)shop;
46 + (instancetype)shopView;
47 @end
48
49
50 @interface XMGShopView()
51 /** 图片 */
52 @property (nonatomic, weak) UIImageView *iconView;
53
54 /** 名字 */
55 @property (nonatomic, weak) UILabel *nameLabel;
56 @end
57
58 @implementation XMGShopView
59
60 - (instancetype)initWithShop:(XMGShop *)shop
61 {
62 if (self = [super init]) {
63 self.shop = shop;
64 }
65 return self;
66 }
67
68 + (instancetype)shopViewWithShop:(XMGShop *)shop
69 {
70 return [[self alloc] initWithShop:shop];
71 }
72
73 + (instancetype)shopView
74 {
75 return [[self alloc] init];
76 }
77
78 /** init方法内部会自动调用initWithFrame:方法 */
79 - (instancetype)initWithFrame:(CGRect)frame
80 {
81 if (self = [super initWithFrame:frame]) {
82 // 添加一个图片
83 UIImageView *iconView = [[UIImageView alloc] init];
84 [self addSubview:iconView];
85 self.iconView = iconView;
86
87 // 添加一个文字
88 UILabel *nameLabel = [[UILabel alloc] init];
89 nameLabel.textAlignment = NSTextAlignmentCenter;
90 [self addSubview:nameLabel];
91 self.nameLabel = nameLabel;
92 }
93 return self;
94 }
95
96 /**
97 * 当前控件的frame发生改变的时候就会调用
98 * 这个方法专门用来布局子控件,设置子控件的frame
99 */
100 - (void)layoutSubviews
101 {
102 // 一定要调用super方法
103 [super layoutSubviews];
104
105 CGFloat shopW = self.frame.size.width;
106 CGFloat shopH = self.frame.size.height;
107
108 self.iconView.frame = CGRectMake(0, 0, shopW, shopW);
109 self.nameLabel.frame = CGRectMake(0, shopW, shopW, shopH - shopW);
110 }
111
112 - (void)setShop:(XMGShop *)shop
113 {
114 _shop = shop;
115
116 self.iconView.image = [UIImage imageNamed:shop.icon];
117 self.nameLabel.text = shop.name;
118 }
119
120 @end
121
122
123
124
125
126
127 controller
128
129
130 @property (nonatomic, strong) NSMutableArray *shops;
131
132
133
134 // 懒加载
135 // 1.第一次用到时再去加载
136 // 2.只会加载一次
137 - (NSMutableArray *)shops
138 {
139 if (_shops == nil) {
140 // 创建"模型数组"
141 _shops = [NSMutableArray array];
142
143 // 获得plist文件的全路径
144 NSString *file = [[NSBundle mainBundle] pathForResource:@"shops.plist" ofType:nil];
145
146 // 从plist文件中加载一个数组对象(这个数组中存放的都是NSDictionary对象)
147 NSArray *dictArray = [NSArray arrayWithContentsOfFile:file];
148
149 // 将 “字典数组” 转换为 “模型数据”
150 for (NSDictionary *dict in dictArray) { // 遍历每一个字典
151 // 将 “字典” 转换为 “模型”
152 XMGShop *shop = [XMGShop shopWithDict:dict];
153
154 // 将 “模型” 添加到 “模型数组中”
155 [_shops addObject:shop];
156 }
157 }
158 return _shops;
159 }
160
161 // 创建一个商品父控件
162 XMGShopView *shopView = [XMGShopView shopViewWithShop:self.shops[index]];
163 // 设置frame
164 shopView.frame = CGRectMake(shopX, shopY, shopW, shopH);
165 // 将商品父控件添加到shopsView中
166 [self.shopsView addSubview:shopView];
167
168
169 /******************************************************************************/
七:Xib的使用
1 七:XIB
2
3 1:xibView中
4 /** 商品模型 */
5 @property (nonatomic, strong) XMGShop *shop;
6 + (instancetype)shopViewWithShop:(XMGShop *)shop;
7
8 + (instancetype)shopViewWithShop:(XMGShop *)shop
9 {
10 // self == XMGShopView
11 // NSStringFromClass(self) == @"XMGShopView"
12 XMGShopView *shopView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil] lastObject];
13 shopView.shop = shop;
14 return shopView;
15 }
16
17 - (void)setShop:(XMGShop *)shop
18 {
19 _shop = shop;
20
21 UIImageView *iconView = (UIImageView *)[self viewWithTag:1];
22 iconView.image = [UIImage imageNamed:shop.icon];
23
24 UILabel *nameLabel = (UILabel *)[self viewWithTag:2];
25 nameLabel.text = shop.name;
26 }
27
28 2:控制器中设置数据
29 // 从xib中加载一个商品控件
30 XMGShopView *shopView = [XMGShopView shopViewWithShop:self.shops[index]];
31 // 设置frame
32 shopView.frame = CGRectMake(shopX, shopY, shopW, shopH);
33 // 添加商品控件
34 [self.shopsView addSubview:shopView];
八:牛逼框架MJExtension使用
1 /******************************************************************************/
2 八:MJExtension
3 1:是一套“字典和模型之间互相转换”的轻量级框架,模型属性
4 /**
5 * 微博文本内容
6 */
7 @property (copy, nonatomic) NSString *text;
8
9 /**
10 * 微博作者
11 */
12 @property (strong, nonatomic) User *user;
13
14 /**
15 * 转发的微博
16 */
17 @property (strong, nonatomic) Status *retweetedStatus;
18
19 /**
20 * 存放着某一页微博数据(里面都是Status模型)
21 */
22 @property (strong, nonatomic) NSMutableArray *statuses;
23
24 /**
25 * 总数
26 */
27 @property (assign, nonatomic) NSNumber *totalNumber;
28
29 /**
30 * 上一页的游标
31 */
32 @property (assign, nonatomic) long long previousCursor;
33
34 /**
35 * 下一页的游标
36 */
37 @property (assign, nonatomic) long long nextCursor;
38
39
40 /**
41 * 名称
42 */
43 @property (copy, nonatomic) NSString *name;
44
45 /**
46 * 头像
47 */
48 @property (copy, nonatomic) NSString *icon;
49
50 2:对应方法的实现
51 /**
52 MJ友情提醒:
53 1.MJExtension是一套“字典和模型之间互相转换”的轻量级框架
54 2.MJExtension能完成的功能
55 * 字典 --> 模型
56 * 模型 --> 字典
57 * 字典数组 --> 模型数组
58 * 模型数组 --> 字典数组
59 3.具体用法主要参考 main.m中各个函数 以及 "NSObject+MJKeyValue.h"
60 4.希望各位大神能用得爽
61 */
62
63 #import <Foundation/Foundation.h>
64 #import "MJExtension.h"
65 #import "User.h"
66 #import "Status.h"
67 #import "StatusResult.h"
68
69 /**
70 * 简单的字典 -> 模型
71 */
72 void keyValues2object()
73 {
74 // 1.定义一个字典
75 NSDictionary *dict = @{
76 @"name" : @"Jack",
77 @"icon" : @"lufy.png",
78 };
79
80 // 2.将字典转为User模型
81 User *user = [User objectWithKeyValues:dict];
82
83 // 3.打印User模型的属性
84 NSLog(@"name=%@, icon=%@", user.name, user.icon);
85 }
86
87 /**
88 * 复杂的字典 -> 模型 (模型里面包含了模型)
89 */
90 void keyValues2object2()
91 {
92 // 1.定义一个字典
93 NSDictionary *dict = @{
94 @"text" : @"是啊,今天天气确实不错!",
95
96 @"user" : @{
97 @"name" : @"Jack",
98 @"icon" : @"lufy.png"
99 },
100
101 @"retweetedStatus" : @{
102 @"text" : @"今天天气真不错!",
103
104 @"user" : @{
105 @"name" : @"Rose",
106 @"icon" : @"nami.png"
107 }
108 }
109 };
110
111 // 2.将字典转为Status模型
112 Status *status = [Status objectWithKeyValues:dict];
113
114 // 3.打印status的属性
115 NSString *text = status.text;
116 NSString *name = status.user.name;
117 NSString *icon = status.user.icon;
118 NSLog(@"text=%@, name=%@, icon=%@", text, name, icon);
119
120 // 4.打印status.retweetedStatus的属性
121 NSString *text2 = status.retweetedStatus.text;
122 NSString *name2 = status.retweetedStatus.user.name;
123 NSString *icon2 = status.retweetedStatus.user.icon;
124 NSLog(@"text2=%@, name2=%@, icon2=%@", text2, name2, icon2);
125 }
126
127 /**
128 * 复杂的字典 -> 模型 (模型的数组属性里面又装着模型)
129 */
130 void keyValues2object3()
131 {
132 // 1.定义一个字典
133 NSDictionary *dict = @{
134 @"statuses" : @[
135 @{
136 @"text" : @"今天天气真不错!",
137
138 @"user" : @{
139 @"name" : @"Rose",
140 @"icon" : @"nami.png"
141 }
142 },
143
144 @{
145 @"text" : @"明天去旅游了",
146
147 @"user" : @{
148 @"name" : @"Jack",
149 @"icon" : @"lufy.png"
150 }
151 },
152
153 @{
154 @"text" : @"嘿嘿,这东西不错哦!",
155
156 @"user" : @{
157 @"name" : @"Jim",
158 @"icon" : @"zero.png"
159 }
160 }
161
162 ],
163
164 @"totalNumber" : @"2014",
165
166 @"previousCursor" : @"13476589",
167
168 @"nextCursor" : @"13476599"
169 };
170
171 // 2.将字典转为StatusResult模型
172 StatusResult *result = [StatusResult objectWithKeyValues:dict];
173
174 // 3.打印StatusResult模型的简单属性
175 NSLog(@"totalNumber=%d, previousCursor=%lld, nextCursor=%lld", result.totalNumber, result.previousCursor, result.nextCursor);
176
177 // 4.打印statuses数组中的模型属性
178 for (Status *status in result.statuses) {
179 NSString *text = status.text;
180 NSString *name = status.user.name;
181 NSString *icon = status.user.icon;
182 NSLog(@"text=%@, name=%@, icon=%@", text, name, icon);
183 }
184 }
185
186 /**
187 * 字典数组 -> 模型数组
188 */
189 void keyValuesArray2objectArray()
190 {
191 // 1.定义一个字典数组
192 NSArray *dictArray = @[
193 @{
194 @"name" : @"Jack",
195 @"icon" : @"lufy.png",
196 },
197
198 @{
199 @"name" : @"Rose",
200 @"icon" : @"nami.png",
201 },
202
203 @{
204 @"name" : @"Jim",
205 @"icon" : @"zero.png",
206 }
207 ];
208
209 // 2.将字典数组转为User模型数组
210 NSArray *userArray = [User objectArrayWithKeyValuesArray:dictArray];
211
212 // 3.打印userArray数组中的User模型属性
213 for (User *user in userArray) {
214 NSLog(@"name=%@, icon=%@", user.name, user.icon);
215 }
216 }
217
218 /**
219 * 模型 -> 字典
220 */
221 void object2keyValues()
222 {
223 // 1.新建模型
224 User *user = [[User alloc] init];
225 user.name = @"Jack";
226 user.icon = @"lufy.png";
227
228 Status *status = [[Status alloc] init];
229 status.user = user;
230 status.text = @"今天的心情不错!";
231
232 // 2.将模型转为字典
233 // NSDictionary *dict = [status keyValues];
234 NSDictionary *dict = status.keyValues;
235 NSLog(@"%@", dict);
236 }
237
238 /**
239 * 模型数组 -> 字典数组
240 */
241 void objectArray2keyValuesArray()
242 {
243 // 1.新建模型数组
244 User *user1 = [[User alloc] init];
245 user1.name = @"Jack";
246 user1.icon = @"lufy.png";
247
248 User *user2 = [[User alloc] init];
249 user2.name = @"Rose";
250 user2.icon = @"nami.png";
251
252 User *user3 = [[User alloc] init];
253 user3.name = @"Jim";
254 user3.icon = @"zero.png";
255
256 NSArray *userArray = @[user1, user2, user3];
257
258 // 2.将模型数组转为字典数组
259 NSArray *dictArray = [User keyValuesArrayWithObjectArray:userArray];
260 NSLog(@"%@", dictArray);
261 }
262
263 int main(int argc, const char * argv[])
264 {
265 @autoreleasepool {
266 // 简单的字典 -> 模型
267 keyValues2object();
268
269 // 复杂的字典 -> 模型 (模型里面包含了模型)
270 keyValues2object2();
271
272 // 复杂的字典 -> 模型 (模型的数组属性里面又装着模型)
273 keyValues2object3();
274
275 // 字典数组 -> 模型数组
276 keyValuesArray2objectArray();
277
278 // 模型转字典
279 object2keyValues();
280
281 // 模型数组 -> 字典数组
282 objectArray2keyValuesArray();
283 }
284 return 0;
285 }
iOS-字典plist读取/字典转模型/自定义View/MVC/Xib的使用/MJExtension使用
标签:
原文地址:http://www.cnblogs.com/CoderAlex/p/4826637.html