這一節,將會對請求的數據和返回的數據進行模型數據封裝。json
###對項目首頁的數據進行封裝:api
###封裝加載首頁微博數據的參數 IWHomeStatusParam.h數組
// // IWHomeStatusParam.h // ItcastWeibo // // Created by kaiyi on 16-6-3. // Copyright (c) 2016年 itcast. All rights reserved. // // 封裝加載首頁微博數據的參數 #import <Foundation/Foundation.h> @interface IWHomeStatusParam : NSObject // 受權token @property (nonatomic, copy) NSString *access_token; // 返回ID比since_id大的微博 @property (nonatomic, strong) NSNumber *since_id; @property (nonatomic, strong) NSNumber *max_id; // 字典裏邊不能放nil,若是爲int,則默認爲0 // @property (nonatomic, assign) int count; @property (nonatomic, strong) NSNumber *count; @end
###請求參數封裝工具類工具
// // IWStatusTool.h // ItcastWeibo // // Created by kaiyi on 16-6-3. // Copyright (c) 2016年 itcast. All rights reserved. //// 業務處理類(工具類) #import <Foundation/Foundation.h> @class IWHomeStatusParam; @interface IWStatusTool : NSObject + (void)homeStatusesWithParam:(IWHomeStatusParam *)param success:(void (^)(id))success failure:(void (^)(NSError *))failure; @end // 方法實現 // // IWStatusTool.m // ItcastWeibo // // Created by kaiyi on 16-6-3. // Copyright (c) 2016年 itcast. All rights reserved. #import "IWStatusTool.h" #import "IWHttpTool.h" #import "MJExtension.h" #import "IWHomeStatusParam.h" @implementation IWStatusTool +(void)homeStatusesWithParam:(IWHomeStatusParam *)param success:(void (^)(id))success failure:(void (^)(NSError *))failure{ [IWHttpTool getWithURL:@"ttps://api.weibo.com/2/statuses/home_timeline.json" params:param.keyValues success:^(id json) { if(success){ success(json); } } failure:^(NSError *error) { if(failure){ failure(error); } }]; } @end
###在項目中的應用:atom
/** * 發送請求加載更多的微博數據 */ - (void)loadMoreData { // 1.建立請求管理對象 // AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager]; // 2.封裝請求參數 /* NSMutableDictionary *params = [NSMutableDictionary dictionary]; params[@"access_token"] = [IWAccountTool account].access_token; params[@"count"] = @5; if (self.statusFrames.count) { IWStatusFrame *statusFrame = [self.statusFrames lastObject]; // 加載ID <= max_id的微博 long long maxId = [statusFrame.status.idstr longLongValue] - 1; params[@"max_id"] = @(maxId); } // 3.發送請求 [IWHttpTool getWithURL:@"https://api.weibo.com/2/statuses/home_timeline.json" params:params success:^(id json) { // 將字典數組轉爲模型數組(裏面放的就是IWStatus模型) NSArray *statusArray = [IWStatus objectArrayWithKeyValuesArray:json[@"statuses"]]; // 建立frame模型對象 NSMutableArray *statusFrameArray = [NSMutableArray array]; for (IWStatus *status in statusArray) { IWStatusFrame *statusFrame = [[IWStatusFrame alloc] init]; // 傳遞微博模型數據 statusFrame.status = status; [statusFrameArray addObject:statusFrame]; } // 添加新數據到舊數據的後面 [self.statusFrames addObjectsFromArray:statusFrameArray]; // 刷新表格 [self.tableView reloadData]; // 讓刷新控件中止顯示刷新狀態 [self.footer endRefreshing]; } failure:^(NSError *error) { // 讓刷新控件中止顯示刷新狀態 [self.footer endRefreshing]; }]; */ //************ 2.封裝請求參數 【2016-06-07 ADD】**************** IWHomeStatusParam *param = [[IWHomeStatusParam alloc] init]; param.access_token = [IWAccountTool account].access_token; if(self.statusFrames.count){ IWStatusFrame *statusFrame = [self.statusFrames lastObject]; param.max_id = @([statusFrame.status.idstr longLongValue] - 1); } // 3.發送請求 [IWStatusTool homeStatusesWithParam:param success:^(id json) { // 將字典數組轉爲模型數組(裏面放的就是IWStatus模型) NSArray *statusArray = [IWStatus objectArrayWithKeyValuesArray:json[@"statuses"]]; // 建立frame模型對象 NSMutableArray *statusFrameArray = [NSMutableArray array]; for (IWStatus *status in statusArray) { IWStatusFrame *statusFrame = [[IWStatusFrame alloc] init]; // 傳遞微博模型數據 statusFrame.status = status; [statusFrameArray addObject:statusFrame]; } // 添加新數據到舊數據的後面 [self.statusFrames addObjectsFromArray:statusFrameArray]; // 刷新表格 [self.tableView reloadData]; // 讓刷新控件中止顯示刷新狀態 [self.footer endRefreshing]; } failure:^(NSError *){ // 讓刷新控件中止顯示刷新狀態 [self.footer endRefreshing]; }]; }
說明:若是請求成功後,方法會傳遞block塊做爲參數,success:^(id json) {}裏邊寫業務代碼,(id json) 爲參數調試
###斷點調試 code
分析圖: 對象