前述部分:我们自己创建一个类为了简化代码
**1.在类的.m文件中**
用多态进行创建对象
+ (NSMutableArray *)baseModelByArr:(NSArray *)arr;
**2.在类的.h文件中**
+ (NSMutableArray *)baseModelByArr:(NSArray *)arr
{
//创建一个数组,用来装model
NSMutableArray *modelArr = [NSMutableArray array];
//对数组进行遍历,里面的元素都是字典
for (NSDictionary *dic in arr) {
@autoreleasepool {
//通过便利构造器的方式创建对象
//将dic传过去这是会返回一个赋完值的model
id model = [[self class]baseModelWithDic:dic];
//把对象添加到数组中
[modelArr addObject:model];
//一般的情况下我们会对model进行释放 但是我们使用便利构造器的创建的 那我们就用自动释放池autoreleasepool来进行管理
}
}
return modelArr;
}
**#pragma mark 便利构造器方法用来创建对象**
+ (instancetype)baseModelWithDic:(NSDictionary *)dic
{
//为了通配我们只能使用id
//[self class]这个方法就可以得到当前的类型既什么类
//采用多态的方式进行对象的创建
id model = [[[[self class] alloc]initWithDic:dic]autorelease];
return model;
}
**#pragma mark 自定义初始化方法用来实现对model用KVC进行赋值**
- (instancetype)initWithDic:(NSDictionary *)dic
{
self = [super init];
if (self) {
//用KVC的方式对成员变量进行赋值
//这里面还是自定义的方式对其进行赋值只不过是KVC方式了
[self setValuesForKeysWithDictionary:dic];
}
return self;
}
- (void)setValue:(id)value forUndefinedKey:(NSString *)key
{
}
**3.在调用封装的基类的.m文件里**
AFHTTPRequestOperationManager *manager =
[AFHTTPRequestOperationManager manager];
[manager GET:@"http://mrobot.pconline.com.cn/v2/cms/channels/1?pageSize=20&pageNo=1" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSDictionary *dic = responseObject;
//调用方法
NSMutableArray *arr = [Test baseModelByArr:dic[@"articleList"]];
for (Test *test in arr) {
//上面的Text是我们要用的model
NSLog(@"%@",test.title);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@",error);
}];
将网络请求也一同封装其中
**封装类的.h文件中**
typedef void(^Block)(id result);
@interface AFNetWorkHandle : NSObject
//现在我们在这个类里进行网络请求然后把请求下来的数据传到前一页面.用block进行传值.
//定义一个block类型
+ (void)GetWithAFNByURL:(NSString *)urlStr completion:(Block)block;
@end
**封装类的.m文件中**
1.引三方AF的头文件:#import "AFNetworking.h"
2.具体代码实现:
+ (void)GetWithAFNByURL:(NSString *)urlStr completion:(Block)block
{
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
//设置响应解析对象
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
//设置AFN对应支持的类型
//nsset集合类型的.他的特点是不重复
[manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"text/json",@"text/html",@"text/css",@"text/javascript",@"application/json", nil]];
//用manager实现get请求
[manager GET:urlStr parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
//responseObject返回的是一个NSData.所以需要手动进行json解析
//id result = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil];
//用block把网络请求下来的内容返回给调用的文件
block(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@",error);
}];
}
**调用代码实现部分.m文件中**
[AFNetWorkHandle GetWithAFNByURL:@"http://mrobot.pconline.com.cn/v2/cms/channels/1?pageSize=20&pageNo=1" completion:^(id result) {
NSDictionary *dic = result;
//调用方法
NSMutableArray *arr = [Test baseModelByArr:dic[@"articleList"]];
for (Test *test in arr) {
NSLog(@"%@",test.title);
}
}];