MJExtension使用指导(转)
来源:互联网 发布:gui config.json下载 编辑:程序博客网 时间:2024/05/19 13:19
MJExtension能做什么?
- MJExtension是一套字典和模型之间互相转换的超轻量级框架
MJExtension能完成的功能
<code class="javascript" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"> 字典(<span class="hljs-built_in" style="color: rgb(38, 139, 210);">JSON</span>) --> 模型(Model) 模型(Model) --> 字典(<span class="hljs-built_in" style="color: rgb(38, 139, 210);">JSON</span>) 字典数组(<span class="hljs-built_in" style="color: rgb(38, 139, 210);">JSON</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">Array</span>) --> 模型数组(Model <span class="hljs-built_in" style="color: rgb(38, 139, 210);">Array</span>) 模型数组(Model <span class="hljs-built_in" style="color: rgb(38, 139, 210);">Array</span>) --> 字典数组(<span class="hljs-built_in" style="color: rgb(38, 139, 210);">JSON</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">Array</span>)</code>
详尽用法主要参考 main.m中的各个函数 以及 NSObject+MJKeyValue.h
MJExtension和JSONModel、Mantle等框架的区别
1. 转换速率:
<code style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">最近一次测试表明:MJExtension > JSONModel > Mantle</code>
各位开发者也可以自行测试
2.具体用法:
JSONModel
:
<code style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">要求所有模型类必须继承自JSONModel基类</code>
Mantle
:
<code style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">要求所有模型类必须继承自MTModel基类</code>
MJExtension
:
<code style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">不需要你的模型类继承任何特殊基类,毫无污染,毫无侵入性</code>
如何使用MJExtension
方法一:cocoapods导入
:pod 'MJExtension'
方法二:手动导入
:
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">将MJExtensionExample/MJExtensionExample/MJExtension文件夹中的所有源代码拽入项目中导入主头文件:<span class="hljs-preprocessor" style="color: rgb(203, 75, 22);">#import <span class="hljs-title" style="color: rgb(38, 139, 210);">"MJExtension.h"</span></span>MJExtension<span class="hljs-variable" style="color: rgb(181, 137, 0);">.h</span>MJConst<span class="hljs-variable" style="color: rgb(181, 137, 0);">.h</span> MJConst<span class="hljs-variable" style="color: rgb(181, 137, 0);">.m</span>MJFoundation<span class="hljs-variable" style="color: rgb(181, 137, 0);">.h</span> MJFoundation<span class="hljs-variable" style="color: rgb(181, 137, 0);">.m</span>MJIvar<span class="hljs-variable" style="color: rgb(181, 137, 0);">.h</span> MJIvar<span class="hljs-variable" style="color: rgb(181, 137, 0);">.m</span>MJType<span class="hljs-variable" style="color: rgb(181, 137, 0);">.h</span> MJType<span class="hljs-variable" style="color: rgb(181, 137, 0);">.m</span><span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSObject</span>+MJCoding<span class="hljs-variable" style="color: rgb(181, 137, 0);">.h</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSObject</span>+MJCoding<span class="hljs-variable" style="color: rgb(181, 137, 0);">.m</span><span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSObject</span>+MJIvar<span class="hljs-variable" style="color: rgb(181, 137, 0);">.h</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSObject</span>+MJIvar<span class="hljs-variable" style="color: rgb(181, 137, 0);">.m</span><span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSObject</span>+MJKeyValue<span class="hljs-variable" style="color: rgb(181, 137, 0);">.h</span> <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSObject</span>+MJKeyValue<span class="hljs-variable" style="color: rgb(181, 137, 0);">.m</span></code>
1.最简单的字典转模型
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">typedef</span> <span class="hljs-keyword" style="color: rgb(133, 153, 0);">enum</span> { SexMale, SexFemale} Sex;<span class="hljs-class"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@interface</span> <span class="hljs-title" style="color: rgb(181, 137, 0);">User</span> : <span class="hljs-title" style="color: rgb(181, 137, 0);">NSObject</span></span><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *name;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *icon;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">assign</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-keyword" style="color: rgb(133, 153, 0);">int</span> age;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">assign</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-keyword" style="color: rgb(133, 153, 0);">double</span> height;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">strong</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSNumber</span> *money;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">assign</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) Sex sex;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@end</span><span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *dict = @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Jack"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"icon"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"lufy.png"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"age"</span> : @<span class="hljs-number" style="color: rgb(42, 161, 152);">20</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"height"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"1.55"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"money"</span> : @<span class="hljs-number" style="color: rgb(42, 161, 152);">100.9</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"sex"</span> : @(SexFemale) };<span class="hljs-comment" style="color: rgb(147, 161, 161);">// 将字典转为User模型</span>User *user = [User objectWithKeyValues:dict];<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"name=%@, icon=%@, age=%d, height=%@, money=%@, sex=%d"</span>, user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span>, user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.icon</span>, user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.age</span>, user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.height</span>, user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.money</span>, user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.sex</span>);<span class="hljs-comment" style="color: rgb(147, 161, 161);">// name=Jack, icon=lufy.png, age=20, height=1.550000, money=100.9, sex=1</span></code>
核心代码1:
<code class="json" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">[User objectWithKeyValues:dict]</code>
2.模型中嵌套模型
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-class"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@interface</span> <span class="hljs-title" style="color: rgb(181, 137, 0);">Status</span> : <span class="hljs-title" style="color: rgb(181, 137, 0);">NSObject</span></span><span class="hljs-comment" style="color: rgb(147, 161, 161);">/** 微博文本内容 */</span><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *text;<span class="hljs-comment" style="color: rgb(147, 161, 161);">/** 微博作者 */</span><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">strong</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) User *user;<span class="hljs-comment" style="color: rgb(147, 161, 161);">/** 转发的微博 */</span><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">strong</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) Status *retweetedStatus;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@end</span><span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *dict = @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"text"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"是啊,今天天气确实不错!"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"user"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Jack"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"icon"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"lufy.png"</span> }, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"retweetedStatus"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"text"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"今天天气真不错!"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"user"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Rose"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"icon"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"nami.png"</span> } } };<span class="hljs-comment" style="color: rgb(147, 161, 161);">// 将字典转为Status模型</span>Status *status = [Status objectWithKeyValues:dict];<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *text = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.text</span>;<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *name = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.user</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span>;<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *icon = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.user</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.icon</span>;<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"text=%@, name=%@, icon=%@"</span>, text, name, icon);<span class="hljs-comment" style="color: rgb(147, 161, 161);">// text=是啊,今天天气确实不错!, name=Jack, icon=lufy.png</span><span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *text2 = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.retweetedStatus</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.text</span>;<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *name2 = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.retweetedStatus</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.user</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span>;<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *icon2 = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.retweetedStatus</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.user</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.icon</span>;<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"text2=%@, name2=%@, icon2=%@"</span>, text2, name2, icon2);<span class="hljs-comment" style="color: rgb(147, 161, 161);">// text2=今天天气真不错!, name2=Rose, icon2=nami.png</span></code>
核心代码2
<code class="json" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">[Status objectWithKeyValues:dict]</code>
3.模型中有个数组属性,数组里面又要装着其它模型
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-class"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@interface</span> <span class="hljs-title" style="color: rgb(181, 137, 0);">Ad</span> : <span class="hljs-title" style="color: rgb(181, 137, 0);">NSObject</span></span><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *image;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *url;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@end</span><span class="hljs-class"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@interface</span> <span class="hljs-title" style="color: rgb(181, 137, 0);">StatusResult</span> : <span class="hljs-title" style="color: rgb(181, 137, 0);">NSObject</span></span><span class="hljs-comment" style="color: rgb(147, 161, 161);">/** 存放着一堆的微博数据(里面都是Status模型) */</span><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">strong</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSMutableArray</span> *statuses;<span class="hljs-comment" style="color: rgb(147, 161, 161);">/** 存放着一堆的广告数据(里面都是Ad模型) */</span><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">strong</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSArray</span> *ads;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">strong</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSNumber</span> *totalNumber;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@end</span><span class="hljs-class"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@implementation</span> <span class="hljs-title" style="color: rgb(181, 137, 0);">StatusResult</span></span><span class="hljs-comment" style="color: rgb(147, 161, 161);">// 实现这个方法的目的:告诉MJExtension框架statuses和ads数组里面装的是什么模型</span><span class="hljs-comment" style="color: rgb(147, 161, 161);">/* + (NSDictionary *)objectClassInArray{ return @{ @"statuses" : [Status class], @"ads" : [Ad class] };}+ (Class)objectClassInArray:(NSString *)propertyName{ if ([propertyName isEqualToString:@"statuses"]) { return [Status class]; } else if ([propertyName isEqualToString:@"ads"]) { return [Ad class]; } return nil;}*/</span><span class="hljs-comment" style="color: rgb(147, 161, 161);">// 这个方法对比上面的2个方法更加没有侵入性和污染,因为不需要导入Status和Ad的头文件</span>+ (<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *)objectClassInArray{ <span class="hljs-keyword" style="color: rgb(133, 153, 0);">return</span> @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"statuses"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Status"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"ads"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Ad"</span> };}<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@end</span><span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *dict = @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"statuses"</span> : @[ @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"text"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"今天天气真不错!"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"user"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Rose"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"icon"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"nami.png"</span> } }, @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"text"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"明天去旅游了"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"user"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Jack"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"icon"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"lufy.png"</span> } } ], <span class="hljs-string" style="color: rgb(42, 161, 152);">@"ads"</span> :@[ @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"image"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"ad01.png"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"url"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"http://www.ad01.com"</span> }, @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"image"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"ad02.png"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"url"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"http://www.ad02.com"</span> } ], <span class="hljs-string" style="color: rgb(42, 161, 152);">@"totalNumber"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"2014"</span> }; <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 将字典转为StatusResult模型</span> StatusResult *result = [StatusResult objectWithKeyValues:dict]; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"totalNumber=%@"</span>, result<span class="hljs-variable" style="color: rgb(181, 137, 0);">.totalNumber</span>); <span class="hljs-comment" style="color: rgb(147, 161, 161);">// totalNumber=2014</span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 打印statuses数组中的模型属性</span> <span class="hljs-keyword" style="color: rgb(133, 153, 0);">for</span> (Status *status <span class="hljs-keyword" style="color: rgb(133, 153, 0);">in</span> result<span class="hljs-variable" style="color: rgb(181, 137, 0);">.statuses</span>) { <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *text = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.text</span>; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *name = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.user</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span>; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *icon = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.user</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.icon</span>; <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"text=%@, name=%@, icon=%@"</span>, text, name, icon);} <span class="hljs-comment" style="color: rgb(147, 161, 161);">// text=今天天气真不错!, name=Rose, icon=nami.png</span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">// text=明天去旅游了, name=Jack, icon=lufy.png</span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">// 打印ads数组中的模型属性</span> <span class="hljs-keyword" style="color: rgb(133, 153, 0);">for</span> (Ad *ad <span class="hljs-keyword" style="color: rgb(133, 153, 0);">in</span> result<span class="hljs-variable" style="color: rgb(181, 137, 0);">.ads</span>) { <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"image=%@, url=%@"</span>, ad<span class="hljs-variable" style="color: rgb(181, 137, 0);">.image</span>, ad<span class="hljs-variable" style="color: rgb(181, 137, 0);">.url</span>);} <span class="hljs-comment" style="color: rgb(147, 161, 161);">// image=ad01.png, url=http://www.ad01.com</span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">// image=ad02.png, url=http://www.ad02.com</span></code>
核心代码3:
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">在模型内部实现+ (<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *)objectClassInArray方法</code>
[StatusResult objectWithKeyValues:dict]
4.模型中的属性名和字典中的key不相同(或者需要多级映射)
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-class"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@interface</span> <span class="hljs-title" style="color: rgb(181, 137, 0);">Bag</span> : <span class="hljs-title" style="color: rgb(181, 137, 0);">NSObject</span></span><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *name;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">assign</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-keyword" style="color: rgb(133, 153, 0);">double</span> price;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@end</span><span class="hljs-class"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@interface</span> <span class="hljs-title" style="color: rgb(181, 137, 0);">Student</span> : <span class="hljs-title" style="color: rgb(181, 137, 0);">NSObject</span></span><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *ID;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *desc;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *nowName;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *oldName;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">copy</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSString</span> *nameChangedTime;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@property</span> (<span class="hljs-keyword" style="color: rgb(133, 153, 0);">strong</span>, <span class="hljs-keyword" style="color: rgb(133, 153, 0);">nonatomic</span>) Bag *bag;<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@end</span><span class="hljs-class"><span class="hljs-keyword" style="color: rgb(133, 153, 0);">@implementation</span> <span class="hljs-title" style="color: rgb(181, 137, 0);">Student</span></span><span class="hljs-comment" style="color: rgb(147, 161, 161);">// 实现这个方法的目的:告诉MJExtension框架模型中的属性名对应着字典的哪个key</span>+ (<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *)replacedKeyFromPropertyName{ <span class="hljs-keyword" style="color: rgb(133, 153, 0);">return</span> @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"ID"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"id"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"desc"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"desciption"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"oldName"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name.oldName"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"nowName"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name.newName"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"nameChangedTime"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name.info.nameChangedTime"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"bag"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"other.bag"</span> };}<span class="hljs-keyword" style="color: rgb(133, 153, 0);">@end</span><span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *dict = @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"id"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"20"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"desciption"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"孩子"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"newName"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"lufy"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"oldName"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"kitty"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"info"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"nameChangedTime"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"2013-08"</span> } }, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"other"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"bag"</span> : @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"小书包"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"price"</span> : @<span class="hljs-number" style="color: rgb(42, 161, 152);">100.7</span> } } };<span class="hljs-comment" style="color: rgb(147, 161, 161);">// 将字典转为Student模型</span>Student *stu = [Student objectWithKeyValues:dict];<span class="hljs-comment" style="color: rgb(147, 161, 161);">// 打印Student模型的属性</span><span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"ID=%@, desc=%@, oldName=%@, nowName=%@, nameChangedTime=%@"</span>, stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.ID</span>, stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.desc</span>, stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.oldName</span>, stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.nowName</span>, stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.nameChangedTime</span>);<span class="hljs-comment" style="color: rgb(147, 161, 161);">// ID=20, desc=孩子, oldName=kitty, nowName=lufy, nameChangedTime=2013-08</span><span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"bagName=%@, bagPrice=%f"</span>, stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.bag</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span>, stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.bag</span><span class="hljs-variable" style="color: rgb(181, 137, 0);">.price</span>);<span class="hljs-comment" style="color: rgb(147, 161, 161);">// bagName=小书包, bagPrice=100.700000</span></code>
核心代码4:
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">在模型内部实现+ (<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *)replacedKeyFromPropertyName方法</code>
[Student objectWithKeyValues:dict]
5.将一个字典数组转成模型数组
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSArray</span> *dictArray = @[ @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Jack"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"icon"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"lufy.png"</span>, }, @{ <span class="hljs-string" style="color: rgb(42, 161, 152);">@"name"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Rose"</span>, <span class="hljs-string" style="color: rgb(42, 161, 152);">@"icon"</span> : <span class="hljs-string" style="color: rgb(42, 161, 152);">@"nami.png"</span>, } ];<span class="hljs-comment" style="color: rgb(147, 161, 161);">// 将字典数组转为User模型数组</span><span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSArray</span> *userArray = [User objectArrayWithKeyValuesArray:dictArray];<span class="hljs-comment" style="color: rgb(147, 161, 161);">// 打印userArray数组中的User模型属性</span><span class="hljs-keyword" style="color: rgb(133, 153, 0);">for</span> (User *user <span class="hljs-keyword" style="color: rgb(133, 153, 0);">in</span> userArray) { <span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"name=%@, icon=%@"</span>, user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span>, user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.icon</span>);} <span class="hljs-comment" style="color: rgb(147, 161, 161);">// name=Jack, icon=lufy.png</span> <span class="hljs-comment" style="color: rgb(147, 161, 161);">// name=Rose, icon=nami.png</span></code>
核心代码5:
<code class="json" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">[User objectArrayWithKeyValuesArray:dictArray]</code>
6.将一个模型转成字典
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-comment" style="color: rgb(147, 161, 161);">// 新建模型</span> User *user = [[User alloc] init];user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Jack"</span>;user<span class="hljs-variable" style="color: rgb(181, 137, 0);">.icon</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"lufy.png"</span>;Status *status = [[Status alloc] init];status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.user</span> = user;status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.text</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"今天的心情不错!"</span>;<span class="hljs-comment" style="color: rgb(147, 161, 161);">// 将模型转为字典</span><span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *statusDict = status<span class="hljs-variable" style="color: rgb(181, 137, 0);">.keyValues</span>;<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"%@"</span>, statusDict);<span class="hljs-comment" style="color: rgb(147, 161, 161);">/*{ text = "今天的心情不错!"; user = { icon = "lufy.png"; name = Jack; }; }*/</span><span class="hljs-comment" style="color: rgb(147, 161, 161);">// 多级映射的模型</span>Student *stu = [[Student alloc] init];stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.ID</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"123"</span>;stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.oldName</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"rose"</span>;stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.nowName</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"jack"</span>;stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.desc</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"handsome"</span>;stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.nameChangedTime</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"2018-09-08"</span>;Bag *bag = [[Bag alloc] init];bag<span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"小书包"</span>;bag<span class="hljs-variable" style="color: rgb(181, 137, 0);">.price</span> = <span class="hljs-number" style="color: rgb(42, 161, 152);">205</span>;stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.bag</span> = bag;<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSDictionary</span> *stuDict = stu<span class="hljs-variable" style="color: rgb(181, 137, 0);">.keyValues</span>;<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"%@"</span>, stuDict);<span class="hljs-comment" style="color: rgb(147, 161, 161);">/*{ desciption = handsome; id = 123; name = { info ={ nameChangedTime = "2018-09-08"; }; newName = jack; oldName = rose; }; other = { bag ={ name = "小书包"; price = 205; }; }; } */</span></code>
核心代码6:
<code class="css" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-tag" style="color: rgb(133, 153, 0);">status</span><span class="hljs-class" style="color: rgb(155, 112, 63);">.keyValues</span>、<span class="hljs-tag" style="color: rgb(133, 153, 0);">stu</span><span class="hljs-class" style="color: rgb(155, 112, 63);">.keyValues</span></code>
7.将一个模型数组转成字典数组
<code class="objectivec" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;"><span class="hljs-comment" style="color: rgb(147, 161, 161);">// 新建模型数组</span> User *user1 = [[User alloc] init];user1<span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Jack"</span>;user1<span class="hljs-variable" style="color: rgb(181, 137, 0);">.icon</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"lufy.png"</span>;User *user2 = [[User alloc] init];user2<span class="hljs-variable" style="color: rgb(181, 137, 0);">.name</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"Rose"</span>;user2<span class="hljs-variable" style="color: rgb(181, 137, 0);">.icon</span> = <span class="hljs-string" style="color: rgb(42, 161, 152);">@"nami.png"</span>;<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSArray</span> *userArray = @[user1, user2];<span class="hljs-comment" style="color: rgb(147, 161, 161);">// 将模型数组转为字典数组</span><span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSArray</span> *dictArray = [User keyValuesArrayWithObjectArray:userArray];<span class="hljs-built_in" style="color: rgb(38, 139, 210);">NSLog</span>(<span class="hljs-string" style="color: rgb(42, 161, 152);">@"%@"</span>, dictArray);<span class="hljs-comment" style="color: rgb(147, 161, 161);">/*( { icon = "lufy.png"; name = Jack; }, { icon = "nami.png"; name = Rose; } )*/</span></code>
核心代码7:
<code class="json" style="padding: 0px; font-family: Menlo, Monaco, Consolas, 'Courier New', monospace; font-size: 12px; background-color: transparent; border: none;">[User keyValuesArrayWithObjectArray:userArray]</code>
0 0
- MJExtension使用指导(转)
- MJExtension使用指导(转)
- MJExtension使用指导(转)
- MJExtension使用指导(转)
- MJExtension使用指导(转)
- MJExtension使用指导(model转换)
- MJExtension 使用指导
- MJExtension使用指导
- MJExtension使用指导
- MJExtension使用指导
- MJExtension使用指导
- MJExtension使用指导
- MJExtension使用指导
- MJExtension使用指导
- iOS JSON转Model的库 MJExtension的基本使用指导
- iOS Json解析框架之MJExtension使用详解(转)
- MJExtension使用
- MJExtension 字典转模型高级使用技巧
- 事件分发:响应链(Event Delivery: The Responder Chain)
- html+css+js实现扁平风格网页计算器
- activity 生命周期
- 编译动态库,静态库makefile简单模板
- ActinBar+DrawerLayout+viewpager+PagerTabStrip的使用
- MJExtension使用指导(转)
- 在android 中mvc的具体体现
- 树状数组poj2481
- Springmvc PropertyEditor实现绑定时的类型转换
- SDK2.0之I2S的中断callback函数
- 分布式数据库中间件对比总结
- solr5.5.3+tomcat8部署
- M了个J大神的MJRefresh
- 【软工】软件工程(四)——生存周期模型