前阵子,看到了一篇关于将controller瘦身的文章,很多同学则是一直都是将数据请求放在controller内,所以当项目越来越大时controller就会变得越来越臃肿,代码读起来简直是折磨人。废话不多说,直接上代码:
在model中.h文件: 创建一个block,代理也行,个人喜好。
#import
typedef void(^success)(NSArray *responseArray,NSError *error);
@interface jokerModel : NSObject
+ (void)loadData:(success)success;
@end
.m文件:
+ (void)loadData:(success)success{
[[Httptool shareManager] getHttpRequest:@"http://api.1-blog.com/biz/bizserver/xiaohua/list.do" paramters:nil success:^(id responseObject) {
NSMutableArray *arr = [NSMutableArray array];
NSArray *videoLists = [responseObject objectForKey:@"detail"];
for (NSDictionary *dict in videoLists) {
[arr addObject:[self dicToModel:dict]];
}
} failure:^(NSError *error) {
success(nil,error);
}];
}
// 字典转模型,必须是类方法(+)
+ (jokerModel *)dicToModel:(NSDictionary *)dic{
jokerModel *model = [[jokerModel alloc] init];
[model setValuesForKeysWithDictionary:dic];
return model;
}
// setValuesForKeysWithDictionary: 内部会调用下面这个方法
- (void)setValue:(id)value forKey:(NSString *)key{
// 调用父类方法 如果不调用父类方法,则setValuesForKeysWithDictionary:不起作用
[super setValue:value forKey:key];
}
- (void)setValue:(id)value forUndefinedKey:(NSString *)key{
}
最后,你在controller中就可以直接请求数据了:
- (void)loadData{
[jokerModel loadData:^(NSArray *responseArray, NSError *error) {
if (error != nil) {
return ;
}
dataArray = [NSArray arrayWithArray:responseArray];
[jokerTabelView reloadData];
}];
}
连接地址:GitHub - Mossion/Joker-master: controller瘦身,不再涉及到网络层。Masonry约束,动态返回高度。缓存高度。