這里就不在多說(shuō)ios關(guān)于架構(gòu)方面的其他問(wèn)題了,有關(guān)MVP塘匣、MVVM等的問(wèn)題請(qǐng)看我的另一篇文章ios面試題目總結(jié)。
程序員的捷徑是什么巷帝,多寫代碼忌卤,多寫代碼,多寫代碼楞泼。
以往的痛點(diǎn)在于開(kāi)始程序員為了節(jié)省通信方面的代碼而將View控件及布局和Model的數(shù)據(jù)獲取及更改驰徊。
一笤闯、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)]; ?// 調(diào)用外部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是我創(chuàng)建的一個(gè)model對(duì)象颗味,他可以進(jìn)行數(shù)據(jù)的獲取。
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; ?// 接受控制器傳入的數(shù)據(jù)來(lái)進(jìn)行加載浦马。
@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; ?// 當(dāng)前頁(yè)數(shù)张漂,需要傳遞給控制器來(lái)控制加載更多的行為晶默。
@property(nonatomic,assign) NSInteger total_rows;
-(NSMutableArray*)getCooperationItemList; ?// 不只有屬性,這個(gè)方法從網(wǎng)絡(luò)獲取數(shù)據(jù)航攒。
@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; //網(wǎng)絡(luò)請(qǐng)求返回?cái)?shù)據(jù)這里是有問(wèn)題的磺陡,可以使用代理,在成功獲得數(shù)據(jù)后讓控制器進(jìn)行數(shù)據(jù)的傳遞刷新漠畜。
}
好了币他,這是自己的一些簡(jiǎn)單的使用經(jīng)驗(yàn)吧。避免了臃腫的控制器的出現(xiàn)憔狞。