MJExtension

1,轉換屬性名稱

一般模型屬性的名稱必須與字典或數組的名稱是一致的,不然則會出錯。但由於字典或數組中的某些名稱會與xcode衝突,因此咱們能夠經過MJExtension更換模型屬性名稱數組

在模型的.m文件實現

-(NSDictionary *)replacedKeyFromPropertyName
{
    return @{@"ID":@"id",@"test":@"mytest"};
}


2,字典轉模型

例子一:能夠多重字典轉換爲模型,不管字典裏面包括多少層字典
    NSDictionary *dict = @{
                           @"id" : @"123424324",
                           @"text" : @"哈哈哈哈哈,天氣真好",
                           @"user" : @{
                                   @"idstr" : @"987766",
                                   @"name" : @"搞笑排行榜",
                                   @"profile_image_url" : @"http://abc.png"
                                   }
                           
                           };
    
    HWStatus *status = [HWStatus objectWithKeyValues:dict];

例子二:
@property (nonatomic, copy) NSString *name;
@property (nonatomic, strong) NSArray *books;
 NSDictionary *dict = @{
                               @"name" : @"張三",
                               @"books" : @[
                                       @{
                                           @"name" : @"葵花1",
                                           @"price" : @"10.6"
                                           },
                                       @{
                                           @"name" : @"葵花2",
                                           @"price" : @"10.9"
                                           },
                                       @{
                                           @"name" : @"葵花3",
                                           @"price" : @"17.6"
                                           },
                                       @{
                                           @"name" : @"葵花4",
                                           @"price" : @"14.4"
                                           }
                                       ]
                               
                               };
        
        HWPerson *person = [HWPerson objectWithKeyValues:dict];
由於MJ不能知道NSAarry *books這個的模型是HWBooks,因此沒法NSAarry *books轉爲模型。即咱們要告知編譯器。
只要咱們在HWPerson.m文件中加上下面方法。

- (NSDictionary *)objectClassInArray
{
    return @{@"books" : [HWBook class]};
}


3,字典數組轉爲模型數組

一個字典對應一個模型,多個字典轉化爲多個模型,再將全部模型加入一個數組xcode

原理:
 //一個微博字典含有一個statuses數組,responseObject默認返回20條微博,因此dictArray有20組statuses數組
        NSArray *dictArray = responseObject[@"statuses"];
        
//statuses數組裏的數據是字典,因此將字典轉爲模型,再將全部模型加入一個數組,方便UITableViewCell使用
        for (NSDictionary *dict in dictArray) {
            WBStatuse *status = [WBStatuse objectWithKeyValues:dict];
            [self.listArray addObject:status];
        }
封裝後:
NSArray *listArray = [MyModel objectArrayWithKeyValuesArray:responseObject[@"statuses"]];

例如數據是:
{
    "statuses": [
        {
            "created_at": "Tue May 31 17:46:55 +0800 2011",
            "id": 11488058246,
            "text": "求關注。",
            "source": "<a href="http://weibo.com" rel="nofollow">新浪微博</a>",
            "favorited": false,
         }
      xxxx....
      ]


4.模型NSCoping協議實現

- (id)initWithCoder:(NSCoder *)decoder
{
    if (self = [super init]) {
        [self enumerateIvarsWithBlock:^(MJIvar *ivar, BOOL *stop) {
        if (ivar.isSrcClassFromFoundation) return;
            ivar.value = [decoder decodeObjectForKey:ivar.name];
        }];
        
    }
    return self;
}

/**
 *  將對象寫入文件的時候調用
 */
- (void)encodeWithCoder:(NSCoder *)encoder
{

    [self enumerateIvarsWithBlock:^(MJIvar *ivar, BOOL *stop) {
        if (ivar.isSrcClassFromFoundation) return;
        [encoder encodeObject:ivar.value forKey:ivar.name];
    }];
}


或者在實現文件直接使用宏  MJCodingImplementation
相關文章
相關標籤/搜索