iOS中将后台JSON数据转化为模型的坑

再拿到了Json数据后怎么把字典写到数组里面去呢?

  方法1:用最原始的方法  

  

-(instancetype)initWithDict:(NSDictionary *)dict {

    if(self = [super init]) {

        [self setValuesForKeysWithDictionary:dict];

    }

    return self;

}

+(instancetype)modelWithDict:(NSDictionary *)dict {

    return [[self alloc] initWithDict:dict];

}

//这个方法一定要写上  ,不然就回报警告的,什么警告呢? undefiedforKey

- (void)setValue:(id)value forUndefinedKey:(NSString *)key

{

    

}

这行代码的作用就是为了避免在你的json'数据的字典在很多个的情况下  然后呢你的.h文件里面可能只有几个字段 而并没有吧json数据里面的全部字段用上的时候这个时候这个就起作用了,这行代码的就可以把多余的字段因为没有一一的键值对应给忽略了

比如这个时候json数据的层级结构是这样的

{
  "result": true, 
  "page": 1, 
  "totalPage": 1, 
  "dicMap": {}, 
  "varList": [
    {}, 
    {}
  ]
}





然后你可以这样

1.在iOS中后台解析出来的数据带有小括号() 他就是表示的[]他就是表示数组和正常的解析是一样的

    [manager GET:@"" parameters:params success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {

        //拿到的2进制数据

//       NSLog(@"object %@",responseObject);

        

       // [responseObject handlerJSONData:responseObject];

    

//        NSLog(@"=====%@======", responseObject);

        

//          NSString *dict = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];

        

       

                NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:NULL];

        NSArray *data = dict[@"varList"];

       

//        self.guessModel = [self.guessModel initWithString:dict usingEncoding:NSUTF8StringEncoding error:nil];

        

//        self.guessModel = [self.guessModel initWithDictionary:dict error:NULL];

//          NSLog(@"-------------%@------------------",data);

    

      

        for (NSDictionary *dict1 in data) {   

            ZYGuess *guess = [ZYGuess modelWithDict:dict1] ;            

            NSLog(@"====%@========", guess);

        }

//         NSLog(@"-------------%@------------------",self.guessModel);        

//        ZYGuess *guess = [[ZYGuess alloc] initWithDictionary:dict[@"varList"] error:nil];

//        ZYGuess *guess = [[ZYGuess alloc] initWithString:dict usingEncoding:NSUTF8StringEncoding error:nil];

//          NSLog(@"vvvvvv-----%@--VVVVVVV",self.guessModel);

//        NSLog(@"guess : %@",guess);

        

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        NSLog(@"%@",error);

    }];

    }

 
原文地址:https://www.cnblogs.com/Ninesday/p/5216220.html