刷新方式

网络笔记

  • 容易出错的地方:
    1.

    通过block来传给另一个页面一个数据,例如这里是数组

    在这里总结一个方法,通过参数返回另一个页面一个消息或者其他东西
    可以把它写成一个block,然后另一个页面调用这个方法的时候直接给block参数赋值就行了!!
    block的参数
    NSURLSessionResponseCancel 告诉服务器取消数据传输
    NSURLSessionResponseAllow 告诉服务器允许传送传输
    completionHandler(NSURLSessionResponseAllow);

    #使用block传递参数的方法如下
    +(void)getComicDataWithStartId:(int)startId complete:(void(^)(NSArray *array))
    //1.创建manager
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //2.创建请求
    [manager GET:Comic_Get parameters:@{@"pageSize":@5, @"startIdx":[NSNumber numberWithInt:startId]} success:^(NSURLSessionDataTask *task, id responseObject) {
       //3.拿到请求获取到得数据
        NSMutableArray * dataArray = [[NSMutableArray alloc] init];
          //遍历数据拿到字典
        for (NSDictionary * dict in responseObject) {
               //通过字典创建模型
            YTModel * model = [[YTModel alloc] initWithDict:dict];
               //将模型存到数组
            [dataArray addObject:model];
        }
    //最后数据通过block返回到视图控制器中然后显示出来
    complete(dataArray);
    } failure:^(NSURLSessionDataTask *task, NSError *error) {   
        NSLog(@"请求失败");
        complete(@[@"请求失败"]);      
    }];   
    }
    #在上面的页面传递了一个数组,使用方法就是在下一个页面的数据源数组中添加传过来的数组
    //======2.使用YTNetWorkManager去请求数据========
    [YTNetWorkManager getComicDataWithStartId:(int)self.dataArray.count complete:^(NSArray *array) {
        //blcok实在请求结束后调用
        [self.dataArray addObjectsFromArray:array];
        [_tableView reloadData];
    }];

    总结几种刷新数据的方式:下拉刷新一般都是通过第三方来做的MSRfresh

    • 第一步通过tableView设置刷新,在相应的block中通知页面加载数据

    • 第二步在页面中注册观察者并且实现加载或者刷新数据

    • 第三步适当的时候停止刷新

    • 最后注销观察者
      1.下拉刷新更多

      //下拉刷新是针对tableView做的,所以刷新的方法应该放在tableViewz来调用
      self.tableView.mj_heaer = [MJRefreshNormaHeader headerWithRefreshingBlock:^{
      //进入刷新状态的时候会自动调用这个方法
      //当进入刷新的时候通知页面重新请求当前界面的数据
      [[NSNotificationCenter defaultCenter]postNotificationName@"loadMoreData" object:@"isRefresh"];
      }
      }];

      2.默认的上拉加载更多

      self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
      //进入刷新状态会自动调用这个block
      //通知视图控制器请求更多的数据
      [NSNotificationCenter defaultCenter]postNotificationName:@"loadMore"
      object:nil];
      }];

      3.添加动画的上拉加载

      MJRefreshAutoGifFooter *footer = [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
        // 设置刷新图片
        NSMutableArray * images = [[NSMutableArray alloc] init];
        for (int i = 0; i < 5; i++) { 
            UIImage * image = [UIImage imageNamed:[NSString stringWithFormat:@"p%d", i]];
            [images addObject:image];
        }
        [footer setImages:images forState:MJRefreshStateRefreshing];
        // 设置尾部
        self.mj_footer = footer;
        !!!!!注意这里有一个loadMoreData的方法必须要实现
        - (void)loadMoreData{
        [[NSNotificationCenter defaultCenter]         postNotificationName:@"loadMore" object:nil];
        }
      ##刷新设置好了之后,要注册观察者并且请求数据或者刷新数据
      //- (void)viewDidLoad {
      [super viewDidLoad]; 
      //注册成为观察者
      [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getNetData:) name:@"loadMore" object:nil]; 
      //获取网路数据
      [self getNetData:nil];    
      //创建界面
      [self creatUI];
      }
      //- (void)getNetData:(NSNotification *)nof{
      //======1.判断是否是下拉刷新=======
      //说明是刷新
      if ([nof.object isEqualToString:@"isRefresh"]) {
                //清空数组
        [self.dataArray removeAllObjects];
      }    
      //======2.使用YTNetWorkManager去请求数据========
      [YTNetWorkManager getComicDataWithStartId:(int)self.dataArray.count complete:^(NSArray *array) {
        //blcok实在请求结束后调用
        [self.dataArray addObjectsFromArray:array];
        [_tableView reloadData];        
        //让刷新控件停止刷新
        [_tableView.mj_footer endRefreshing];
        [_tableView.mj_header endRefreshing];        
      }];
      }
      //最后要注销观察者
      //-  (void)dealloc{
      //移除观察者
      [[NSNotificationCenter defaultCenter] removeObserver:self];   
      }


你可能感兴趣的:(刷新方式)