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; //网络请求返回数据这里是有问题的,可以使用代理,在成功获得数据后让控制器进行数据的传递刷新。

}

好了,这是自己的一些简单的使用经验吧。避免了臃肿的控制器的出现。

你可能感兴趣的:(MVC的实际使用)