在用AFNetworking获取数据时,要调用它的block设置回调函数。当一个页面需要多次请求时,需要写多个回调函数,这样代码很混乱,为此自己写了一个统一回调的AFNetConnect类
//
// AFNetConnect.h
// 香记咖啡
//
// Created by JkWpq on 15/4/26.
// Copyright (c) 2015年 HZD. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "AFNetworking.h"
#import "AFURLRequestSerialization.h"
@protocol AFNetConnectDelegate<NSObject>
- (void)AFNetConnectSuccessed:(id)data tag:(NSInteger)tag;
- (void)AFNetConnectFailed:(NSInteger)tag;
@end
@interface AFNetConnect : UIView{
AFHTTPRequestOperationManager* manager;
UIActivityIndicatorView* _loadingView;
}
@property (nonatomic, weak) id<AFNetConnectDelegate>delegate;
- (void)cancelRequest;
-(id)initWithTag:(NSInteger)tag;
-(id)initWithShowLoading:(BOOL)sb tag:(NSInteger)Tag;
/**
* GEt
*
* @param url url
*/
-(void)loadUrl:(NSString*)urlString;
/**
* Post不上传文件
*
* @param url url
* @param parameters 字典参数
*/
-(void)post:(NSString*)urlString dic:(NSMutableDictionary*)parameters;
/**
* Post上传文件
*
* @param url url
* @param parameters 字典参数
* @param FileData 文件数据
* @param filename 文件名
* @param fileTye 文件格式
*/
-(void)post:(NSString*)urlString
dic:(NSDictionary*)parameters
data:(NSData*)FileData
fileName:(NSString*)filename
fileTye:(NSString*)fileTye;
@end
//
// AFNetConnect.m
// 香记咖啡
//
// Created by JkWpq on 15/4/26.
// Copyright (c) 2015年 HZD. All rights reserved.
//
#import "AFNetConnect.h"
@implementation AFNetConnect
@synthesize delegate;
-(id)initWithShowLoading:(BOOL)sb tag:(NSInteger)Tag{
self=[super init];
if (self) {
if (sb) {
self.tag=Tag;
self.frame=[UIScreen mainScreen].bounds;
_loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
_loadingView.bounds = CGRectMake(0, 0, 40, 40);
_loadingView.center = self.center;
[_loadingView startAnimating];
[self addSubview:_loadingView];
}
}
return self;
}
-(id)initWithTag:(NSInteger)tag{
self=[super init];
if (self) {
self.tag=tag;
}
return self;
}
//Get
-(void)loadUrl:(NSString*)urlString {
manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
[self requestFinished:responseObject];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
[self requestFailed];
}];
}
//Post
-(void)post:(NSString*)urlString dic:(NSMutableDictionary*)parameters{
manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager POST:urlString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
[self requestFinished:responseObject];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
[self requestFailed];
}];
}
//Post上传文件
-(void)post:(NSString*)urlString
dic:(NSDictionary*)parameters
data:(NSData*)FileData
fileName:(NSString*)filename
fileTye:(NSString*)fileTye{
manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager POST:urlString parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:FileData name:@"file" fileName:filename mimeType:fileTye];
} success:^(AFHTTPRequestOperation *operation, id responseObject){
[self requestFinished:responseObject];
NSLog(@"上传成功");
} failure:^(AFHTTPRequestOperation *operation, NSError *error){
[self requestFailed];
NSLog(@"上传失败");
}];
}
#pragma mark -- RequestOPeration
//取消请求
- (void)cancelRequest{
self.delegate=nil;
[manager.operationQueue cancelAllOperations];
[self removeFromSuperview];
}
//请求结束后
- (void)requestFinished:(id)data{
NSString* str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@",str);
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
if (delegate&&[delegate respondsToSelector:@selector(AFNetConnectSuccessed:tag:)])
{
[delegate AFNetConnectSuccessed:dic tag:self.tag];
}
self.delegate = nil;
[self removeFromSuperview];
[_loadingView stopAnimating];
[_loadingView removeFromSuperview];
}
//请求失败
- (void)requestFailed{
if (delegate&&[delegate respondsToSelector:@selector(AFNetConnectFailed:)])
{
[delegate AFNetConnectFailed:self.tag];
}
self.delegate = nil;
[self removeFromSuperview];
[_loadingView stopAnimating];
[_loadingView removeFromSuperview];
}
-(void)dealloc{
self.delegate=nil;
[manager.operationQueue cancelAllOperations];
[_loadingView stopAnimating];
[_loadingView removeFromSuperview];
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
// Drawing code
}
*/
@end