MVC的实际使用

作者: 扑腾的蛾子 | 来源:发表于2017-07-17 22:15 被阅读23次

    这里就不在多说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的实际使用

        本文链接:https://www.haomeiwen.com/subject/ksgqkxtx.html