首先,不要害怕,他是帮助我们简化问题的(比如自动降NSNull转成nil,减少崩溃的可能),所以并不会难用。
我们通常用的就是MTLJSONAdapter,MTLModel
tip 1:继承MTLModel,遵守MTLJSONSerializing协议
你需要实现这个方法来写明一下映射关系,这个是我觉得Mantle不好的一点,如果属性和传过来的接口是一样的名字,也必须要在这个方法里一一对应,不太好,MJExtension就不需要。
+ (NSDictionary *)JSONKeyPathsByPropertyKey
用的时候
data转字典
[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
字典转模型
Model *model = [MTLJSONAdapter modelOfClass:[Model class] fromJSONDictionary:dict error:nil];
如果你的模型里面想要的是NSDate, 但是传过来的是NSNumber的话,你可以实现这个方法来转换一下。
+ (NSValueTransformer *)dateJSONTransformer { // 这里要注意哦,你要在方法名前面加上你要修改的属性名哦
return [MTLValueTransformer reversibleTransformerWithForwardBlock:^(NSNumber *dateNum) {
return [NSDate dateWithTimeIntervalSince1970:dateNum.floatValue];
} reverseBlock:^(NSDate *date) {
return [NSString stringWithFormat:@"%f",[date timeIntervalSince1970]];
}];
}
这里面reverseBlock是用来模型转json的
也就是这个方法
+ (NSDictionary *)JSONDictionaryFromModel:
当你的模型里有的属性是数组的话,你就需要告诉他一下,这个数组里面放的是什么模型,也就是实现这个方法
+ (NSValueTransformer *)recommendListJSONTransformer { // 这里的命名方式同上
return [MTLJSONAdapter arrayTransformerWithModelClass:[XXXModel class]];
}
如果你的模型里的一个属性是另一个Model的话,那么你就需要实现这个方法
+ (NSValueTransformer *)companyInfoJSONTransformer { // 这里的命名方式同上
return [MTLJSONAdapter dictionaryTransformerWithModelClass:[XXXModel class]];
}
当你想把模型存储起来的时候你可以酱紫操作。
归档操作
[NSKeyedArchiver archiveRootObject:model toFile:path];
解档操作
TestDataModel *unachiveModel = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
参考文章:http://blog.csdn.net/majiakun1/article/details/45829561