? ? ? 前陣子,看到了一篇關于將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約束,動態返回高度。緩存高度。