iOS通過(guò)網(wǎng)絡(luò)請(qǐng)求解析數(shù)據(jù)_中國(guó)省市區(qū)街道

  • 二話不說(shuō)就上圖,大家看看效果先
上海市
云南省
本篇文章主要涉及講解表視圖和集合視圖和網(wǎng)絡(luò)請(qǐng)求解析數(shù)據(jù)
  • 以下的類的創(chuàng)建:

這里我給一個(gè)URL定位符:

http://apis.map.qq.com/ws/district/v1/list?key=K3VBZ-M6WWV-PPSPY-UVGGC-DRM2Z-PGBMV

這里面是全國(guó)34個(gè)省直轄市, 市, 自治區(qū), 市區(qū),街道的詳細(xì)介紹, 今天就講一下網(wǎng)絡(luò)請(qǐng)求的數(shù)據(jù)進(jìn)行數(shù)據(jù)解析


ViewController.m

@interface ViewController ()<UICollectionViewDelegate,       UICollectionViewDataSource, UITableViewDelegate, UITableViewDataSource>
@property(nonatomic, retain)NSMutableArray *dataSourceProvinceArray;
/**省的集合數(shù)組*/
@property(nonatomic, retain)UICollectionView *collectionView;
/**市的表視圖*/
@property(nonatomic, retain)UITableView *cityTableView;
/**區(qū)的表視圖*/
@property(nonatomic, retain)UITableView *zoneTableView;
/**市的集合數(shù)組*/
@property(nonatomic, retain)NSMutableArray *dataSourceCityArray;
/**區(qū)的集合數(shù)組*/
@property(nonatomic, retain)NSMutableArray *dataSourceZoneArray;
/***/
@property(nonatomic, assign)NSInteger currentProvinceIndex;
@end

@implementation ViewController
  • 咱們先把屬性都準(zhǔn)備好, 再把表視圖和集合視圖的協(xié)議簽好
- (void)getData
{
    //請(qǐng)求數(shù)據(jù)并解析
    NSString *strURL = @"http://apis.map.qq.com/ws/district/v1/list?key=K3VBZ-M6WWV-PPSPY-UVGGC-DRM2Z-PGBMV";
    NSURL *URL = [NSURL URLWithString:strURL];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
    //數(shù)據(jù)源數(shù)組:
    self.dataSourceProvinceArray = [NSMutableArray array];
    NSArray *arr = [dic valueForKey:@"result"];
    for (NSDictionary *dic in arr[0])
    {
        ProvinceModel *model = [[ProvinceModel alloc] init];
        [model setValuesForKeysWithDictionary:dic];
        NSLog(@"%@ * %@", model.fullname, model.id);
        [self.dataSourceProvinceArray addObject:model];
        [model release];
    }
    //collectionView的數(shù)據(jù)刷新
}
  • getData這個(gè)方法里是網(wǎng)絡(luò)請(qǐng)求數(shù)據(jù)的解析省份數(shù)據(jù)信息
- (void)getcityDataById:(NSString *)proID
{
    NSString *urlString = [NSString stringWithFormat:@"http://apis.map.qq.com/ws/district/v1/getchildren?&id=%@&key=K3VBZ-M6WWV-PPSPY-UVGGC-DRM2Z-PGBMV", proID];
    NSURL *URL = [NSURL URLWithString:urlString];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
    
    NSArray *allArray = [dic objectForKey:@"result"];
    NSArray *array = [allArray objectAtIndex:0];
    //遍歷當(dāng)前數(shù)組給madel賦值
    self.dataSourceCityArray = [NSMutableArray array];
    for (NSDictionary *diction in array)
    {
        CityModel *model = [[CityModel alloc] init];
        [model setValuesForKeysWithDictionary:diction];
        [self.dataSourceCityArray addObject:model];
        [model release];
    }
    //請(qǐng)求市后 刷新tableView
    [self.cityTableView reloadData];
}
  • getcityDataById:這個(gè)方法里是網(wǎng)絡(luò)請(qǐng)求數(shù)據(jù)的解析市數(shù)據(jù)信息
- (void)getZoneDatabyId:(NSString *)cityID
{
    NSString *urlString = [NSString stringWithFormat:@"http://apis.map.qq.com/ws/district/v1/getchildren?&id=%@&key=K3VBZ-M6WWV-PPSPY-UVGGC-DRM2Z-PGBMV", cityID];
    NSURL *URL = [NSURL URLWithString:urlString];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
    
    NSArray *allArray = [dic objectForKey:@"result"];
    NSArray *array = [allArray objectAtIndex:0];
    //遍歷當(dāng)前數(shù)組給madel賦值
    self.dataSourceZoneArray = [NSMutableArray array];
    for (NSDictionary *diction in array)
    {
        ZoneModel *model = [[ZoneModel alloc] init];
        [model setValuesForKeysWithDictionary:diction];
        [self.dataSourceZoneArray addObject:model];
        [model release];
    }
    //請(qǐng)求區(qū)后 刷新tableView
    [self.zoneTableView reloadData];
}
  • getZoneDatabyId:這個(gè)方法里是網(wǎng)絡(luò)請(qǐng)求數(shù)據(jù)的解析區(qū)/街道數(shù)據(jù)信息
- (void)viewDidLoad {
    [super viewDidLoad];
    
    //設(shè)置省坐標(biāo)為-1
    self.currentProvinceIndex = -1;
    
    //解析數(shù)據(jù):
    [self getData];
    
    //初始化瀑布流flowLayout:
    UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
    flowLayout.itemSize = CGSizeMake(100, 50);
    flowLayout.minimumInteritemSpacing = 10;
    flowLayout.minimumLineSpacing = 10;
    flowLayout.sectionInset = UIEdgeInsetsMake(5, 5, 5, 5);
    flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
    
    //初始化collectionView
    self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, 300) collectionViewLayout:flowLayout];
    
    self.collectionView.delegate = self;
    self.collectionView.dataSource = self;
    
    self.collectionView.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:_collectionView];
    [_collectionView release];
    
    //注冊(cè)collectionView的cell
    [self.collectionView registerClass:[ProvinceCell class] forCellWithReuseIdentifier:@"proCell"];
    
    //初始化市視圖
    self.cityTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, _collectionView.frame.origin.y + _collectionView.frame.size.height, self.view.frame.size.width / 2.0, self.view.frame.size.height - 20 - _collectionView.frame.size.height) style:UITableViewStylePlain];
    self.cityTableView.delegate = self;
    self.cityTableView.dataSource = self;
    [self.view addSubview:_cityTableView];
    [_cityTableView release];
    //注冊(cè)市tableView的cell
    [self.cityTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cityCell"];
    
    
    //初始化區(qū)視圖
    self.zoneTableView = [[UITableView alloc] initWithFrame:CGRectMake(self.view.frame.size.width / 2.0,  _collectionView.frame.origin.y + _collectionView.frame.size.height,  self.view.frame.size.width / 2.0, self.view.frame.size.height - 20 - _collectionView.frame.size.height) style:UITableViewStylePlain];
    self.zoneTableView.delegate = self;
    self.zoneTableView.dataSource = self;
    [self.view addSubview:_zoneTableView];
    [_zoneTableView release];
    //注冊(cè)區(qū)tableView的cell
    [self.zoneTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"zoneCell"];

}
  • 下面是表視圖和集合視圖的一些代理方法:
//--------------------------省collecctionView的代理方法--------------------------//
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return self.dataSourceProvinceArray.count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    ProvinceCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"proCell" forIndexPath:indexPath];
    //設(shè)置cell顯示內(nèi)容
    ProvinceModel *model = [self.dataSourceProvinceArray objectAtIndex:indexPath.row];
    cell.proNameLabel.text = model.fullname;
    return cell;
}

//item的點(diǎn)擊方法
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    //判斷當(dāng)前省是否正在選中
    if (self.currentProvinceIndex != indexPath.row)
    {
        //獲取當(dāng)前省的model:
        ProvinceModel *model = [self.dataSourceProvinceArray objectAtIndex:indexPath.item];
        [self getcityDataById:model.id];
        //清空區(qū)的數(shù)組并更新
        [self.dataSourceZoneArray removeAllObjects];
        [self.zoneTableView reloadData];
        
        self.currentProvinceIndex = indexPath.row;
    }
}

//--------------------------城市tableView的代理方法--------------------------//
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (tableView == _cityTableView)
    {
        return self.dataSourceCityArray.count;
    }
    else
    {
        return self.dataSourceZoneArray.count;
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == _cityTableView)
    {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cityCell"];
        CityModel *model = [self.dataSourceCityArray objectAtIndex:indexPath.row];
        cell.textLabel.text = model.fullname;
        return cell;
    }
    else
    {
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"zoneCell"];
        ZoneModel *model = [self.dataSourceZoneArray objectAtIndex:indexPath.row];
        cell.textLabel.text = model.fullname;
        return cell;
    }
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == _cityTableView)
    {
        CityModel *model = [self.dataSourceCityArray objectAtIndex:indexPath.row];
        [self getZoneDatabyId:model.id];
    }
}

ProvinceCell.h

這里面只有一個(gè)屬性

@property(nonatomic, retain)UILabel *proNameLabel;

ProvinceCell.m

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        self.proNameLabel = [[UILabel alloc] init];
        self.proNameLabel.textAlignment = NSTextAlignmentCenter;
        self.proNameLabel.layer.borderWidth = 0.5;
        self.proNameLabel.layer.cornerRadius = 5;
        self.proNameLabel.font = [UIFont systemFontOfSize:12];
        [self.contentView addSubview:_proNameLabel];
        [_proNameLabel release];
    }
    return self;
}

//設(shè)置空間坐標(biāo)frame
- (void)layoutSubviews
{
    [super layoutSubviews];
    
    self.proNameLabel.frame = self.bounds;
}

CityModel.h

@property(nonatomic, copy)NSString *fullname;
@property(nonatomic, copy)NSString *name;
@property(nonatomic, copy)NSString *id;

CityModel.m 和 ZoneModel.m

Model我們都只寫一個(gè)容錯(cuò)方法就可以

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

ZoneModel.h

@property(nonatomic, copy)NSString *fullname;
@property(nonatomic, copy)NSString *name;
@property(nonatomic, copy)NSString *id;

大功告成了, 小伙伴們是不是感覺真神奇! 中國(guó)那么大, 我想去看看! 要想去看看, 給個(gè)好評(píng)先!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末炭分,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子爷狈,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疮薇,死亡現(xiàn)場(chǎng)離奇詭異福贞,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)祖驱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門握恳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人捺僻,你說(shuō)我怎么就攤上這事乡洼。” “怎么了匕坯?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵束昵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我葛峻,道長(zhǎng)锹雏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任术奖,我火速辦了婚禮礁遵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘采记。我一直安慰自己佣耐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布唧龄。 她就那樣靜靜地躺著兼砖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上讽挟,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天然走,我揣著相機(jī)與錄音,去河邊找鬼戏挡。 笑死芍瑞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的褐墅。 我是一名探鬼主播拆檬,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼妥凳!你這毒婦竟也來(lái)了竟贯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤逝钥,失蹤者是張志新(化名)和其女友劉穎屑那,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體艘款,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡持际,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哗咆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜘欲。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晌柬,靈堂內(nèi)的尸體忽然破棺而出姥份,到底是詐尸還是另有隱情,我是刑警寧澤年碘,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布澈歉,位于F島的核電站,受9級(jí)特大地震影響屿衅,放射性物質(zhì)發(fā)生泄漏埃难。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一傲诵、第九天 我趴在偏房一處隱蔽的房頂上張望凯砍。 院中可真熱鬧,春花似錦拴竹、人聲如沸悟衩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)座泳。三九已至惠昔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挑势,已是汗流浹背镇防。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留潮饱,地道東北人来氧。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像香拉,于是被迫代替她去往敵國(guó)和親啦扬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,917評(píng)論 6 13
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,744評(píng)論 25 707
  • *面試心聲:其實(shí)這些題本人都沒(méi)怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來(lái)就是把...
    Dove_iOS閱讀 27,130評(píng)論 30 470
  • 昨晚輾轉(zhuǎn)反側(cè)凫碌,終于決定出來(lái)走一走扑毡。 早上起床,我看著窗外下起了漂泊大雨盛险。一個(gè)月都沒(méi)有下雨了瞄摊,沒(méi)有想到的是此時(shí)此刻竟...
    陪月亮摘星星閱讀 338評(píng)論 12 19
  • 作者:張靜如 1、真誠(chéng)待人苦掘,經(jīng)常使用美的措辭换帜。 贊美或者鼓勵(lì)別人,能讓對(duì)方保持美好的心情鸟蜡,同時(shí)傳達(dá)美麗的心情膜赃。 夸...
    佩盈閱讀 558評(píng)論 0 8