MJRefresh的那些坑

现在正在写一个新的项目,由于之前用过MJ所以感觉这个第三方库还是相当简便的。可是真正用最新的MJ的时候才发现竟然也有坑。
1.MJ最新的库竟然跟一年多以前的风格完全不同了,之前用的MJ还是调用performselelctor实现的header和footer两个方法大致是这个样子的。
[myTable addHeaderWithTarget:self action:@selector(headerRereshing)];
[myTable addFooterWithTarget:self action:@selector(footerRereshing)];
2.而现在竟然最新的方法是Block,万恶的Block啊,虽然Block处理代码块很方便但是也正是这个Block带来了更大的坑。Block设置header和footer的方法如下
//头部刷新
self.myTable.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
}];
// 马上进入刷新状态
[self.myTable.header beginRefreshing];
//底部刷新
self.myTable.footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
}];
3.既然说到了block的坑,那得说明,否则会招到大家的口诛笔伐,其实也不算是大坑了,只是在请求的时候发现一个问题,就是为什么上下拉刷新的操作都是在主线程中的呢?
当我们把请求放入block中执行回调的时候就会发现我们的界面完全卡死,知道数据请求结束。之前一直找不到问题所在,原来是请求的问题。所以在此将请求和MJ的用法给大家分享下。处理后的代码如下
self.hotTableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
//开启异步线程请求数据
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// 进入刷新状态后会自动调用这个block
currentPage =0;
self.hotTableView.footer.hidden=NO;
NSDictionary *requestInfo =[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInteger:currentPage],@”pageNo”,@”10”,@”pageSize”,userIdStr,@”userId”, nil];
[[requestHelper defaultHelper]requestForType:myList info:requestInfo target:self successSel:@”requstSuccessWithResult:” failedSel:@”reuqestFailedWithError:” rebackTasks:@”requestTaskForCancel:”];
});
}];
如果有补充的地方,各位大神帮忙分享下。

你可能感兴趣的:(日积月累)