協議)使用一個解釋器MTLJSONAdapter去轉換模型對象。NSError*error=nil;MyObject*myObject=[MTLJSONAdaptermodelOfClass:MyObject.classfromJSONDictionary:JSONDictiona" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Mantle 簡單教程

系統 1885 0

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 歸檔這個模型對象。

Mantle 簡單教程


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 云阳县| 武陟县| 巴彦县| 浦东新区| 琼中| 南投市| 彩票| 白朗县| 遂溪县| 古交市| 江源县| 额敏县| 阿勒泰市| 读书| 平湖市| 永德县| 开平市| 沙坪坝区| 遂宁市| 荣昌县| 奉贤区| 漳州市| 神木县| 盐城市| 桂东县| 金平| 库伦旗| 阿城市| 泗洪县| 靖西县| 萨嘎县| 错那县| 黎城县| 伊金霍洛旗| 安吉县| 环江| 西青区| 双柏县| 榕江县| 衡东县| 宿松县|