MVC的实际使用
这里就不在多说ios关于架构方面的其他问题了,有关MVP、MVVM等的问题请看我的另一篇文章ios面试题目总结。
程序员的捷径是什么,多写代码,多写代码,多写代码。
以往的痛点在于开始程序员为了节省通信方面的代码而将View控件及布局和Model的数据获取及更改。
一、controller中
- (void)viewDidLoad {
[super viewDidLoad];
self.cView = [[CooperationView alloc] initWithFrame:self.view.frame];
[self.view addSubview:self.cView]; // 加载外部的View。
self.modelAry = [NSMutableArray array];
self.cView.modelAry = self.modelAry; // 组织View及Model的通信。
[self setupRefresh];
}
-(void)setupRefresh{
self.cView.collectionView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNew)]; // 调用外部View.
self.cView.collectionView.mj_header.automaticallyChangeAlpha = YES;
[self.cView.collectionView.mj_header beginRefreshing];
self.cView.collectionView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMore)];
self.cView.collectionView.mj_footer.hidden = YES;
}
-(void)loadNew{
[self.cView.collectionView.mj_footer endRefreshing];
self.modelAry = [self.c getCooperationItemList]; //self.c是我创建的一个model对象,他可以进行数据的获取。
self.cView.modelAry = self.modelAry;
[self.cView.collectionView reloadData];
[self.cView.collectionView.mj_header endRefreshing];
[self checkFooterState];
}
二、View中
@interface CooperationView : UIView
@property(nonatomic, strong) UICollectionView *collectionView; // 添加uicollectiongview
@property (nonatomic, strong) NSMutableArray *modelAry; // 接受控制器传入的数据来进行加载。
@end
三、model中
@interface Cooperation : NSObject
@property(nonatomic, copy) NSString *product_id;
@property(nonatomic, copy) NSString *number;
@property(nonatomic, copy) NSString *name;
@property(nonatomic, copy) NSString *price;
@property(nonatomic, copy) NSString *inventory;
@property(nonatomic, copy) NSString *image;
@property(nonatomic,assign) NSInteger current_page; // 当前页数,需要传递给控制器来控制加载更多的行为。
@property(nonatomic,assign) NSInteger total_rows;
-(NSMutableArray*)getCooperationItemList; // 不只有属性,这个方法从网络获取数据。
@end
-(NSMutableArray *)getCooperationItemList{
__block NSMutableArray *modelAry = [NSMutableArray array];
self.current_page = 1;
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"per_page"] = @(10);
params[@"page"] = @(self.current_page);
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
params[@"token"] = [defaults objectForKey:@"token"];
[manager GET:[kDomainBaseUrl stringByAppendingString:@"product/cooperateProductLists"] parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
self.current_page = [responseObject[@"meta"][@"pagination"][@"current_page"] integerValue];
self.total_rows = [responseObject[@"meta"][@"pagination"][@"total"] integerValue];
NSArray *rows = responseObject[@"data"];
modelAry = [Cooperation mj_objectArrayWithKeyValuesArray:rows];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
}];
return modelAry; //网络请求返回数据这里是有问题的,可以使用代理,在成功获得数据后让控制器进行数据的传递刷新。
}
好了,这是自己的一些简单的使用经验吧。避免了臃肿的控制器的出现。