//在DataManager.h裏 #import <Foundation/Foundation.h> @class DataManager; //block回調傳值 /** * 請求成功回調json數據 * * @param json json串 */ typedef void(^Success)(id json); /** * 請求失敗回調錯誤信息 * * @param error error錯誤信息 */ typedef void(^Failure)(NSError *error); @interface DataManager : NSObject //單例模式 + (DataManager *)manager; /** * GET請求 * * @param url NSString 請求url * @param paramters NSDictionary 參數 * @param success void(^Success)(id json)回調 * @param failure void(^Failure)(NSError *error)回調 */ - (void)getDataWithUrl:(NSString *)url parameters:(NSDictionary *)paramters success:(Success)success failure:(Failure)failure; /** * POST請求 * * @param url NSString 請求url * @param paramters NSDictionary 參數 * @param success void(^Success)(id json)回調 * @param failure void(^Failure)(NSError *error)回調 */ - (void)postDataWithUrl:(NSString *)url parameters:(NSDictionary *)paramters success:(Success)success failure:(Failure)failure; @end
//在DataManager.m裏 #import "DataManager.h" #import <AFNetworking.h> #import <JSONKit.h> #import <UIKit+AFNetworking.h> static DataManager *manager = nil; static AFHTTPSessionManager *afnManager = nil; @implementation DataManager /** * 建立單例 * * @return <#return value description#> */ + (DataManager *)manager { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ manager = [[DataManager alloc] init]; afnManager = [AFHTTPSessionManager manager]; afnManager.responseSerializer = [AFHTTPResponseSerializer serializer]; }); return manager; } /** * 處理字符串將其轉成標準json格式 * * @param data 響應數據 * * @return id */ + (id)handleResponseObject:(NSData *)data { //將獲取的二進制數據轉成字符串 NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; //去掉字符串裏的轉義字符 NSString *str1 = [str stringByReplacingOccurrencesOfString:@"\\" withString:@""]; //去掉頭和尾的引號「」 NSString *str2 = [str1 substringWithRange:NSMakeRange(1, str1.length-2)]; //最終str2爲json格式的字符串,將其轉成須要的字典和數組 id object = [str2 objectFromJSONString]; return object; } /** * 提示信息 * * @param message 要提示的內容 */ + (void)showAlertViewWithMessage:(NSString *)message { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [alertView show]; } //GET請求 - (void)getDataWithUrl:(NSString *)url parameters:(NSDictionary *)paramters success:(Success)success failure:(Failure)failure { afnManager.responseSerializer = [AFJSONResponseSerializer serializer]; [afnManager GET:url parameters:paramters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { if (responseObject) { success(responseObject); }else { [[self class] showAlertViewWithMessage:@"暫無數據"]; } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { if (error) { [[self class] showAlertViewWithMessage:@"服務器出錯了~~~~(>_<)~~~~"]; failure(error); } }]; } //POST請求 - (void)postDataWithUrl:(NSString *)url parameters:(NSDictionary *)paramters success:(Success)success failure:(Failure)failure { [afnManager POST:url parameters:paramters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { if (responseObject) { success([[self class] handleResponseObject:responseObject]); }else { [[self class] showAlertViewWithMessage:@"暫無數據"]; } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { if (error) { [[self class] showAlertViewWithMessage:@"服務器出錯了~~~~(>_<)~~~~"]; failure(error); } }]; } @end