你的位置:首页 > 操作系统

[操作系统]关于Mantle使用个人的一些见解


    前一个月,我接触到了Mantle,由于项目采用的是MVC的设计模式,选用好的model也是至关重要的。先介绍下Mantle的使用吧。

首先定义好数据模型:

@property (nonatomic, copy)    NSString  *address;

@property (nonatomic, copy)    NSString  *contact_info;

@property (nonatomic, copy)    NSString  *contact_name;

@property (nonatomic, assign)    NSInteger  id;

@property (nonatomic, copy)    NSString  *oppen_time;

@property (nonatomic, copy)    NSString  *project_id;

@property (nonatomic, copy)    NSString  *project_name;

@property (nonatomic, copy)    NSString  *project_situation;

@property (nonatomic, copy)    NSString  *title_name;

@property (nonatomic, copy)    NSString  *url;

然后.m文件中实现如下方法:

+(NSDictionary *)JSONKeyPathsByPropertyKey{

    return @{};

}

使用

   _biddingModel=[MTLJSONAdapter modelOfClass:[TTBiddingModel class] fromJSONDictionary:dic error:nil];

 

会什么会return呢?后面我会讲到。

参考了《为什么唱吧iOS6.0选择了Mantle》http://www.cocoachina.com/ios/20141016/9931.html

JSONKeyPathsByPropertyKey这个协议方法是将返回json中的内容序列化

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{
        @"identifier": @"id",
        @"displayDiscription": @"description",
        @"thisIsANewShit": @"newShit",
        @"creativeProduct": @"copyToChina",
        @"betterPropertyName": @"m_wired_propertyName"
    }
}
对属性名进行自动转换。
 
so为什么我会return{}呢,我们来看一看mantle的源代码
首先它定义了这样一个属性

@property (nonatomic, copy, readonly) NSDictionary *JSONKeyPathsByPropertyKey;

此时_JSONKeyPathsByPropertyKey就是我们刚刚用到的+ (NSDictionary *)JSONKeyPathsByPropertyKey {};

_JSONKeyPathsByPropertyKey = [[modelClass JSONKeyPathsByPropertyKey] copy];

 

init 方法里面

- (id)initWithModel:(MTLModel<MTLJSONSerializing> *)model {

NSParameterAssert(model != nil);

self = [super init];

if (self == nil) return nil;

_model = model;

_modelClass = model.class;

_JSONKeyPathsByPropertyKey = [[model.class JSONKeyPathsByPropertyKey] copy];

return self;

}

这里我cocopods的Mantle是1.5版本的,而最新的2.0.2版本舍去掉了如下方法:

- (NSString *)JSONKeyPathForPropertyKey:(NSString *)key {

NSParameterAssert(key != nil);

id JSONKeyPath = self.JSONKeyPathsByPropertyKey[key];

if ([JSONKeyPath isEqual:NSNull.null]) return nil;

if (JSONKeyPath == nil) {

return key;

} else {

return JSONKeyPath;

}

}

所以,这就是我为什么会在协议方法里return {},这里应该很明白了吧,序列化时,它会自动匹配property定义的属性。有没有很方便呢?

 





海南旅游住宿攻略海南旅游最佳时间海南自驾游最佳路线深圳去四川旅游报价跟团去四川旅游多少钱深圳青青世界好玩吗? 2015广州萤火虫动漫展好玩吗? 广西容县都峤山学生证打折吗?容县都峤山学生票优惠多少? 2015中关村美食节有什么好吃的?怎么去? 流光溢彩灯会展 热热闹闹过元宵 2015长隆欢乐世界三八妇女节女士半价时间?广州长隆欢乐世界3.8女性半价几天? 抓住最后的年味儿 到菩提古镇喜气洋洋闹元宵 用一个字形容云南16州市 你觉得是什么 七娘山野炊山庄几点开门?深圳七娘山野炊山庄开门时间? 七娘山野炊山庄官网,深圳七娘山野炊山庄官方网站。 七娘山野炊山庄门票2015-10-12月深圳七娘山野炊山庄门票价格 七娘山野炊山庄怎么走?深圳七娘山野炊山庄门票多少钱? 马尔代夫在哪?马尔代夫位于哪个大洋? 泰国曼谷有多少个长途汽车站? 泰国11月份天气如何?穿什么? 马尔代夫蓝色美人蕉岛怎么样?好玩吗? IDT72V3633L15PF8 Datasheet IDT72V3633L15PF8 Datasheet IDT5V2528APGGI Datasheet IDT5V2528APGGI Datasheet IDT71V3558S133PFGI8 Datasheet IDT71V3558S133PFGI8 Datasheet 包头到港澳三天旅游 包头到港澳三天旅游 包头到港澳三天旅游 大兴安岭香港两天游 大兴安岭香港两天游 大兴安岭香港两天游 齐齐哈尔到香港三天游 齐齐哈尔到香港三天游 齐齐哈尔到香港三天游