用AFNetworking框架管理從聚合數據上請求到的API數據

數據從JSON文檔中讀取處理的過程稱為“解碼”過程,即解析和讀取過程潜索,來看一下如果利用AFNetworking框架去管理從聚合數據上面請求到的數據臭增。

一、下載并導入AFNetworking框架

這部分內容如果不了解的話可以點擊iOS開發(fā)之網絡編程篇六:AFNetworking3.0使用簡介

二竹习、聚合數據API-餐飲美食

1.申請餐飲美食API:https://www.juhe.cn/docs/api/id/45


聚合數據API用法簡介
2.請求體介紹

lng和lat參數表示對應的經緯度誊抛,用來確定你想要請求哪個地方的美食餐飲,key參數即為APPKEY整陌,你申請該API以后可以到應用詳細頁查詢拗窃,dtype參數是用來確定你想得到的數據是什么格式的瞎领,默認為JSON,如果想要xml格式就需要設置該參數随夸。

3.返回值介紹


該餐飲美食API會返回上圖所示的參數九默,可以根據實際需要來使用。

三宾毒、發(fā)送網絡請求

1.知道API需要請求的參數以后驼修,就可以通過接口地址和API文檔中給出的請求方式,請求到所需的數據诈铛。



2.根據餐飲美食API的接口文檔我們知道需要用get方式去請求乙各。

NSMutableDictionary *params=[NSMutableDictionary dictionary];
    //在數組里面添加請求參數
    params[@"key"] = @"987d0c7bd487209bd5bb4065b3d4fcc2";
    params[@"lng"] = @"121.538123";
    params[@"lat"] = @"31.677132";
    //創(chuàng)建請求管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //發(fā)送請求,使用get癌瘾,請求成功以后返回的數據會存放到responseObject中
    [manager GET:@"http://apis.juhe.cn/catering/query" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
            //在請求成功以后程序會執(zhí)行success
            //此處可以對請求到的數據進行處理
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
    }];
}

四觅丰、解析返回的數據

1.我們發(fā)送網絡請求以后會返回下圖所示的數據:



從圖中我們可以看到發(fā)送請求以后返回了一個字典,字典中result關鍵字對應的數組就是我們想要得到的數據妨退,我們項目中需要用到該數組中navigation參數對應的數據妇萄,那我就可以遍歷result關鍵字對應的數組,找到navigation參數對應的數據咬荷,然后將其存放到一個新的數組中冠句。

[manager GET:@"http://apis.juhe.cn/catering/query" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {       
        //新建一個字典來存放返回的數據
        NSMutableDictionary *datasouce=[responseObject mutableCopy];        
        //在返回的字典中,將關鍵字result索引到的數據存放到另外的數組中
        NSArray * resultArray = [datasouce objectForKey:@"result"];
        //遍歷resultArray數組得到navigation對應的數據幸乒,并存放到result數組中
        for (NSDictionary *dic in resultArray) {
            NSString *navigation = [dic objectForKey:@"navigation"];
            [result addObject:navigation];         
        }
        [self.delegate data:result];
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        NSLog(@"%@",error);
    }];
}

2.創(chuàng)建一個繼承于NSObject的Data類懦底,用來得到從聚合數據上面請求到的數據,并在Data.h文件中添加相應的屬性方法


-(void) getdata;//在ViewController中執(zhí)行此方法從而得到JSON數據

3.在Data.m文件中完成相應的屬性方法

-(void) getdata{ 
    __block NSMutableArray *result = [[NSMutableArray alloc] init];
    NSMutableDictionary *params=[NSMutableDictionary dictionary];
    //在數組里面添加請求參數罕扎,根據聚合數據的文檔說明添加
    params[@"key"] = @"987d0c7bd487209bd5bb4065b3d4fcc2";
    params[@"lng"] = @"121.538123";
    params[@"lat"] = @"31.677132";
    //創(chuàng)建請求管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //發(fā)送請求
    [manager GET:@"http://apis.juhe.cn/catering/query" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {       
        //如果數據請求成功返回到responseObject中
        NSMutableDictionary *datasouce=[responseObject mutableCopy];        
        //在返回的字典中通過關鍵字result索引到的數據存放到另外的數組中
        NSArray * resultArray = [datasouce objectForKey:@"result"];
        //遍歷resultArray數組得到navigation對應的數據
        for (NSDictionary *dic in resultArray) {
            NSString *navigation = [dic objectForKey:@"navigation"];
            [result addObject:navigation];         
        }
        [self.delegate data:result];
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        NSLog(@"%@",error);
    }];
}

4.創(chuàng)建一個DataDelegate協議聚唐,并添加相關的代理方法,用來傳遞JSON數據腔召。

#import <Foundation/Foundation.h>
@protocol DataDelegate //通過代理將得到的JSON數據傳遞到ViewController
- (void) data: (NSMutableArray *)array;
@end
@interface Data : NSObject
@property (nonatomic, weak) id <DataDelegate> delegate;//代理屬性
-(void) getdata;
@end

五杆查、在TableView上面顯示得到的JSON數據

1.添加相關的屬性以及代理協議

@interface ViewController ()<UITableViewDataSource,UITableViewDelegate,DataDelegate>
@property (nonatomic, strong) UITableView *myTableView;
@property (nonatomic, strong) NSArray *myArray;//用來存放JSON數據的數組
@property (nonatomic, strong) Data *myData;
@end

2.使懶加載方式初始化所需的控件以及數組

- (Data *)myData{
    if (!_myData) {
        _myData = [[Data alloc] init];
        _myData.delegate = self;
        [_myData getdata];
    }
    return _myData;
}
- (NSArray *) myArray{
    if (!_myArray) {
        _myArray = [[NSArray alloc ] init];       
           }
    return _myArray;
}
- (UITableView *) myTableView{ 
    if (!_myTableView) {
        _myTableView = [[UITableView alloc] initWithFrame:self.view.frame];
        _myTableView.dataSource = self;
        _myTableView.delegate = self;
        [self.view addSubview: _myTableView];
    }
    return _myTableView;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    [self myArray];
    [self myData];
    [self myTableView];
}

3.在tableView的數據源方法中將得到的JSON數據顯示到tableView上面

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return  self.myArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
    if (cell == nil) {        
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }
    if (self.myArray != nil && self.myArray.count > 0) {
        cell.textLabel.text = [self.myArray objectAtIndex:[indexPath row]];
    }   
    return cell;
}

4.由于tableView的數據源方法會先執(zhí)行,因此我們需要在Data的代理方法中得到JSON數據以后刷新tableView臀蛛。

- (void)data:(NSMutableArray *)array{  
    self.myArray = array;
    [self.myTableView reloadData];
}

示例代碼
http://pan.baidu.com/s/1skJUHPF

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末亲桦,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子浊仆,更是在濱河造成了極大的恐慌客峭,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抡柿,死亡現場離奇詭異舔琅,居然都是意外死亡,警方通過查閱死者的電腦和手機沙绝,發(fā)現死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門搏明,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鼠锈,“玉大人,你說我怎么就攤上這事星著」喊剩” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵虚循,是天一觀的道長同欠。 經常有香客問我,道長横缔,這世上最難降的妖魔是什么铺遂? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮茎刚,結果婚禮上襟锐,老公的妹妹穿的比我還像新娘。我一直安慰自己膛锭,他們只是感情好粮坞,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著初狰,像睡著了一般莫杈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奢入,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天筝闹,我揣著相機與錄音,去河邊找鬼腥光。 笑死关顷,一個胖子當著我的面吹牛,可吹牛的內容都是我干的武福。 我是一名探鬼主播解寝,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼艘儒!你這毒婦竟也來了?” 一聲冷哼從身側響起夫偶,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤界睁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后兵拢,有當地人在樹林里發(fā)現了一具尸體翻斟,經...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年说铃,在試婚紗的時候發(fā)現自己被綠了访惜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘹履。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖债热,靈堂內的尸體忽然破棺而出砾嫉,到底是詐尸還是另有隱情,我是刑警寧澤窒篱,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布焕刮,位于F島的核電站,受9級特大地震影響墙杯,放射性物質發(fā)生泄漏配并。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一高镐、第九天 我趴在偏房一處隱蔽的房頂上張望溉旋。 院中可真熱鬧,春花似錦嫉髓、人聲如沸观腊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恕沫。三九已至,卻和暖如春纱意,著一層夾襖步出監(jiān)牢的瞬間婶溯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工偷霉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留迄委,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓类少,卻偏偏與公主長得像叙身,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子硫狞,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理信轿,服務發(fā)現,斷路器残吩,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 發(fā)現 關注 消息 iOS 第三方庫财忽、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,059評論 4 62
  • 問題: You need to find the largest value in each row of a b...
    Cloudox_閱讀 365評論 0 0
  • 自作多情
    面面包閱讀 129評論 0 0
  • 30天的寫作計劃泣侮,已經進行了一半即彪。即使只是要求堅持每天寫500字,依然非常吃力活尊。拿到寫作話題隶校,從早想到晚漏益,有時候也...
    定云止水_0cc5閱讀 268評論 1 3