清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
// // Action.m // article // // Created by EasyIOS on 14-4-8. // Copyright (c) 2014年 zhuchao. All rights reserved. // #import "Action.h" @implementation Action DEF_SINGLETON(Action) //1、params //2、key params - (ActionBlockTN)GET_MSG { ActionBlockTN block = ^ Action * ( id first,id second,... ) { if ( first && second) { if ( [second isKindOfClass:[NSDictionary class]] ) { NSString * path = (NSString *)first; NSDictionary * params = (NSDictionary *)second; [self GET:path params:params key:@""]; }else{ va_list args; va_start( args, second ); NSString * key = (NSString *)first; NSString * path = (NSString *)second; NSDictionary * params = va_arg( args, NSDictionary * ); if ( key && params ) { [self GET:path params:params key:key]; } va_end( args ); } } return self; }; return [block copy]; } //1、path params //2、key path params - (ActionBlockN)POST_MSG { ActionBlockN block = ^ Action * ( id first,id second,id third,... ) { if ( first && second && third) { if ( [second isKindOfClass:[NSDictionary class]] ) { NSString * path = (NSString *)first; NSDictionary *files = (NSDictionary *)second; NSDictionary *params = (NSDictionary *)third; [self POST:path file:files params:params key:@""]; }else{ va_list args; va_start( args, third ); NSString *key = (NSString *)first; NSString *path = (NSString *)second; NSDictionary *files = (NSDictionary *)third; NSDictionary *params = va_arg( args, NSDictionary * ); if ( key && path) { [self POST:path file:files params:params key:key]; } va_end( args ); } } return self; }; return [block copy]; } +(id)Action{ return [[[self class] alloc] init]; } - (id)init { self = [super initWithHostName:HOST_URL customHeaderFields:@{@"x-client-identifier" : CLIENT}]; return self; } - (id)initWithCache { self = [self init]; [self useCache]; return self; } -(MKNetworkOperation*) GET:(NSString*) path params:(NSDictionary *) params key:(NSString *)key { MKNetworkOperation *op = [self operationWithPath:[NSString stringWithFormat:@"%@%@",BASE_URL,path] params:params httpMethod:@"GET"]; ActionData *msg = [ActionData Data]; msg.op = op; msg.method = @"GET"; msg.params = params; msg.path = path; msg.key = key; [self sending:msg]; NSLog(@"%@",msg.op.url); [op addCompletionHandler:^(MKNetworkOperation* completedOperation) { [completedOperation responseJSONWithCompletionHandler:^(id jsonObject) { msg.responseString = completedOperation.responseString; msg.output = jsonObject; [self checkCode:msg]; if([completedOperation isCachedResponse]){ NSLog(@"iscache:YES"); }else{ NSLog(@"iscache:NO"); } }]; } errorHandler:^(MKNetworkOperation *errorOp, NSError* error) { msg.error = error; [self failed:msg]; }]; [self enqueueOperation:op]; return op; } -(MKNetworkOperation*) POST:(NSString*) path file:(NSDictionary *) file params:(NSDictionary *) params key:(NSString *)key { MKNetworkOperation *op = [self operationWithPath:[NSString stringWithFormat:@"%@%@",BASE_URL,path] params:params httpMethod:@"POST"]; ActionData *msg = [ActionData Data]; msg.op = op; msg.params = params; msg.path = path; msg.method = @"POST"; msg.key = key; msg.files = file; for (NSString *key in [file allKeys]) { [op addFile:[file objectForKey:key] forKey:key]; } [op setFreezable:NO]; [self sending:msg]; NSLog(@"%@",op.url); [op addCompletionHandler:^(MKNetworkOperation* completedOperation) { [completedOperation responseJSONWithCompletionHandler:^(id jsonObject) { msg.responseString = completedOperation.responseString; msg.output = jsonObject; [self checkCode:msg]; if([completedOperation isCachedResponse]){ NSLog(@"iscache:YES"); }else{ NSLog(@"iscache:NO"); } }]; } errorHandler:^(MKNetworkOperation *errorOp, NSError* error) { msg.error = error; [self failed:msg]; }]; [op onUploadProgressChanged:^(double progress) { msg.progress = progress; [self progressing:msg]; }]; [self enqueueOperation:op]; return op; } -(void)checkCode:(ActionData *)msg{ if([msg.output objectForKey:CODE_KEY] && [[msg.output objectForKey:CODE_KEY] intValue] == RIGHT_CODE){ [self success:msg]; }else{ [self error:msg]; } } -(void)sending:(ActionData *)msg{ msg.state = SendingState; if([self.aDelegaete respondsToSelector:@selector(handleActionMsg:)]){ [self.aDelegaete handleActionMsg:msg]; } } - (void)success:(ActionData *)msg{ msg.discription = [msg.output objectForKey:MSG_KEY]; if (msg.state != SuccessState) { msg.state = SuccessState; if([self.aDelegaete respondsToSelector:@selector(handleActionMsg:)]){ [self.aDelegaete handleActionMsg:msg]; } } } - (void)failed:(ActionData *)msg{ if(msg.error.userInfo!= nil && [msg.error.userInfo objectForKey:@"NSLocalizedDescription"]){ msg.discription = [msg.error.userInfo objectForKey:@"NSLocalizedDescription"]; } msg.state = FailState; NSLog(@"Failed:%@",msg.error); if([self.aDelegaete respondsToSelector:@selector(handleActionMsg:)]){ [self.aDelegaete handleActionMsg:msg]; } } - (void)error:(ActionData *)msg{ if([msg.output objectForKey:MSG_KEY]){ msg.discription = [msg.output objectForKey:MSG_KEY]; NSLog(@"Error:%@",msg.discription); } msg.state = ErrorState; if([self.aDelegaete respondsToSelector:@selector(handleActionMsg:)]){ [self.aDelegaete handleActionMsg:msg]; } } -(void)progressing:(ActionData *)msg{ if([self.aDelegaete respondsToSelector:@selector(handleProgressMsg:)]){ [self.aDelegaete handleProgressMsg:msg]; } } @end