关于包含地图的ios应用,省市地名为本地json格式的解析以及加载到tabview上数据的构建

来源:互联网 发布:货运数据 量化投资 编辑:程序博客网 时间:2024/06/05 22:57

  今天在做应用的时候发现坑爹的服务器将地名做成了本地的json文件,刚开始看的时候感觉很简单,但是做的时候就发现,解析出来的数据需要重新构造数据结构再加载到tableview上面,困扰了我足足有两个小时,下面是自己的一些小思想,具体见如下的代码:

-(void)loadData

{

   NSError *error=nil;

   NSString *filePath=[[NSBundlemainBundle]pathForResource:@"areasheng"ofType:@"json"];//首先获取文件的路径

   NSData *data=[NSDatadataWithContentsOfFile:filePath];//根据文件路径将其转成data类型的数据

   NSArray *arry=[NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingMutableLeaveserror:&error];//根据json数据的结构来确定用字典还是数组来接收请求回来的数据

    NSMutableArray *dataArr=[NSMutableArrayarray];

   if (error) {

       NSLog(@"%@",error);//判断是否解析出现错误,如果出现错误要记得分析原因

    }

   for (NSDictionary *tempin arry) {

       ProvienceModel *model=[[ProvienceModelalloc]initWithDictionary:temp];

        model.letterName=[[ChineseToPinyinpinyinFromChiniseString:model.name]substringToIndex:1];//ChineseToPinyin是汉字转拼音的一个第三方库其中有+方法pinyinFromChiniseString

        [dataArraddObject:model];

    }

   NSArray *ResultArr=[dataArrsortedArrayUsingComparator:^NSComparisonResult(ProvienceModel *obj1,ProvienceModel *obj2) {

        

        return [obj1.letterNamecompare:obj2.letterNameoptions:NSNumericSearch];

    }];//通过循环比较数组里面数据的letterName来对数组进行排序,从而得到新的数组

   NSMutableArray *tempArrForGroup=nil;

   BOOL flag=NO;//设置一个flag来标记什么时候要将数据存入大数组self.ProvienceList

   for (NSInteger index=0; index<ResultArr.count; index++) {

       ProvienceModel *model=ResultArr[index];

       if (![self.SectionHeadercontainsObject:model.letterName]) {

            [self.SectionHeaderaddObject:model.letterName];//self.SectionHeader是用来保存索引使用的数组

            tempArrForGroup =[[NSMutableArrayalloc]initWithObjects:nil];//当每次有新数据的时候要将tempArrForGroup数组初始化从来加载后续的数据

           flag=NO;

        }

       if ([self.SectionHeadercontainsObject:model.letterName]) {

            [tempArrForGroupaddObject:model];

           if (flag==NO) {

                [self.ProvienceListaddObject:tempArrForGroup];

               flag=YES;

            }

        }

    }

   NSLog(@"%@",self.ProvienceList);//最后打印一下看数据结构是否正确,如果正确就可以进行加载数据的操作了

    

}

如有不正确的地方还请大家指正


0 0
原创粉丝点击