文档章节

Mantle 第三方库建立model使用

JK_Jack
 JK_Jack
发布于 2015/10/19 17:18
字数 485
阅读 29
收藏 0

Mantle使用

Mantle可以很方便的去书写一个模型层的代码。

使用它可以很方便的去反序列化JSON或者序列化为JSON(需要在MTLModel子类中实现<MTLJSONSerializing>协议)

使用一个解释器MTLJSONAdapter去转换模型对象。

NSError *error = nil;
MyObject *myObject = [MTLJSONAdapter modelOfClass:MyObject.class fromJSONDictionary:JSONDictionary error:&error]; //把JSONDictionary转换为模型对象

NSDictionary *JSONDictionary = [MTLJSONAdapter JSONDictionaryFromModel:myObject]; //将模型对象转为JSON字典

+JSONKeyPathsByPropertyKey

这个方法返回一个字典,指定着你的模型对象和JSON中关键字的映射关系。

一个例子:

@interface XYUser : MTLModel

@property (readonly, nonatomic, copy) NSString *name;
@property (readonly, nonatomic, strong) NSDate *createdAt;

@property (readonly, nonatomic, assign, getter = isMeUser) BOOL meUser;

@end

@implementation XYUser

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
 return @{
 @"createdAt": @"created_at", //这里代表createdAt属性映射JSON中的created_at关键字
 @"meUser": NSNull.null //meUser不会从JSON中反序列化
};
}

@end

当我们用字典反序列化的时候

NSDictionary *JSONDictionary = @{
 @"name": @"john",
 @"created_at": @"2013/07/02 16:40:00 +0000",
 @"plan": @"lite"
};

XYUser *user = [MTLJSONAdapter modelOfClass:XYUser.class fromJSONDictionary:JSONDictionary error:&error];

//user中的name为john createdAt为2013/07/02 16:40:00 +0000 meUser为0 plan将会被忽略

+JSONTransformerForKey:

实现这个方法去用一个不一样的类型转换器去转化属性

+ (NSValueTransformer *)JSONTransformerForKey:(NSString *)key {
 if ([key isEqualToString:@"createdAt"]) {
 return [NSValueTransformer valueTransformerForName:XYDateValueTransformerName];
}
 return nil;
}

对于一些值的转换:

+ (NSValueTransformer *)createdAtJSONTransformer {
 return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(NSString *str) {
 return [self.dateFormatter dateFromString:str];
 } reverseBlock:^(NSDate *date) {
 return [self.dateFormatter stringFromDate:date];
}];
}

+classForParsingJSONDictionary:

如果定义了一个类簇,可以实现这个方法去转换。

@interface XYMessage : MTLModel

@end

@interface XYTextMessage: XYMessage

@property (readonly, nonatomic, copy) NSString *body;

@end

@interface XYPictureMessage : XYMessage

@property (readonly, nonatomic, strong) NSURL *imageURL;

@end

@implementation XYMessage

+ (Class)classForParsingJSONDictionary:(NSDictionary *)JSONDictionary {
 if (JSONDictionary[@"image_url"] != nil) {
 return XYPictureMessage.class;
}

 if (JSONDictionary[@"body"] != nil) {
 return XYTextMessage.class;
}

 NSAssert(NO, @"No matching class for the JSON dictionary '%@'.", JSONDictionary);
 return self;
}

@end

使用

NSDictionary *textMessage = @{
 @"id": @1,
 @"body": @"Hello World!"
};

NSDictionary *pictureMessage = @{
 @"id": @2,
 @"image_url": @"http://example.com/lolcat.gif"
};

XYTextMessage *messageA = [MTLJSONAdapter modelOfClass:XYMessage.class fromJSONDictionary:textMessage error:NULL];

XYPictureMessage *messageB = [MTLJSONAdapter modelOfClass:XYMessage.class fromJSONDictionary:pictureMessage error:NULL];

数据的持久化


MTLModel已经遵循了<NSCoding>协议,所以可以NSKeyedArchiver归档这个模型对象。

本文转载自:

共有 人打赏支持
上一篇: 多线程
下一篇: 内存管理
JK_Jack
粉丝 0
博文 6
码字总数 2658
作品 0
广州
私信 提问
《iOS进阶指南》试读之《Mantle解析》

Mantle 阅读一个库的源码,首先要知道,我们为什么需要这一类的库。 Mantle的目的 Mantle 的诞生是为了更方便的将服务端返回的数据映射为我们的 Model。 简单来说,我们在写 app 的时候,经常...

叶孤城___
2016/06/18
0
0
学习笔记整理

写iOS 程序的时候往往需要很多第三方框架的支持,可以大大减少工作量,讲重点放在软件本身的逻辑实现上。 GitHub 里面有大量优秀的第三方框架,而且 License 对商业很友好。一下摘录一下几乎...

我是IT码农
2016/03/29
8
0
常用的第三方

1.AFNetworking   目前比较推荐的iOS网络请求组件,默认网络请求是异步,通过block回调的方式对返回数据进行处理。 2.FMDB   对sqlite数据库操作进行了封装,demo也比较简单。 3.MBProg...

凉亭-月下殇
2016/11/04
14
0
工作中有可能用到的开源库和第三方组件

 项目名称 项目信息 AFNetworking 网络请求组件 FMDB 本地数据库组件 SDWebImage 多个缩略图缓存组件 UICKeyChainStore 存放用户账号密码组件 Reachability 监测网络状态 DateTools 友好化...

在脚下的路
2016/01/15
162
0
iOS开发中使用Mantle构建模型层

iOS开发中使用Mantle构建模型层 曾静的技术博客2017-12-100 阅读 iOS 在iOS的开发中为了快速的实现产品的迭代和新功能的开发,常常会弱化Model的功能,NSDictionary作为承载业务的数据类型出...

曾静的技术博客
2017/12/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
39分钟前
2
0
IntelliJ IDEA 第一个 Scala 程序

IntelliJ 安装完成 Scala 插件后,你需要尝试使用 IntelliJ 来创建并且运行第一个程序。 通常这个程序只是简单的输出 Hello World。 创建一个新工程 在文件下面选择新建,然后选择创建工程。...

honeymose
44分钟前
2
0
mysql分表,分区的区别和联系

一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同...

吴伟祥
46分钟前
1
0
csapp 习题 - 如何实现异或 exclusive-or

阅读 csapp v3 时,练习题 2.13 很有意思。练习题描述如下。 位设置是对于参数 mask 中每一个为 1 的位,那么参数 x 中相应位则被设置为 1 ;位清除是对于参数 mask 中每一个为 1 的位,那么...

ylme
昨天
6
0
Amino——产品迭代

兴趣部落产品迭代 时间 版本号 更新内容 备注 2019年1月2日 v3.1.1 支持定制部落首页的内容tab,酋长可以将精华、相册、分类添加到部落首页啦。 支持申请酋长,酋长可以直接推送优质话题,快...

铸剑为犁413
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部