最近在使用MJRefresh框架时发现了一个bug
下面是我的源代码
前一个界面
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ // 显示网页 CHGWebViewController *webVc = [[CHGWebViewController alloc] init]; // 设置数据 webVc.data = self.data[indexPath.row]; [self.navigationController pushViewController:webVc animated:YES]; }
后一个界面
#import "CHGWebViewController.h" #import "CHGData.h" #import "MJChiBaoZiHeader.h" @interface CHGWebViewController ()<UIWebViewDelegate> @property (nonatomic, weak) UIWebView *webView; @end @implementation CHGWebViewController - (void)viewDidLoad { [super viewDidLoad]; // 添加背景 self.view.backgroundColor = [UIColor whiteColor]; // 显示标题 self.title = self.data.username; // 1.网页控件 UIWebView *webView = [[UIWebView alloc] init]; // 2.设置frm webView.frame = self.view.bounds; self.webView = webView; // 3.添加webview [self.view addSubview:webView]; // 4.显示网页 NSURL *url = [NSURL URLWithString:self.data.url]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; // 用于调整界面 (适配手机版网页) webView.scalesPageToFit = YES; // 加载网页 [webView loadRequest:request]; [webView reload]; // 5. 设置代理 添加下拉刷新 webView.delegate = self; __weak UIScrollView *scrollView = webView.scrollView; // // 添加下拉刷新控件 // scrollView.header = [MJChiBaoZiHeader headerWithRefreshingBlock:^{ // [webView reload]; // }]; scrollView.header = [MJChiBaoZiHeader headerWithRefreshingTarget:self refreshingAction:@selector(reload)]; [webView.scrollView.header beginRefreshing]; } - (void)reload{ [self.webView reload]; } #pragma mark - webViewDelegate - (void)webViewDidFinishLoad:(nonnull UIWebView *)webView { [self.webView.scrollView.header endRefreshing]; } - (void)dealloc { NSLog(@"%s",__func__); } @end
注意:
当你使用Block这个方法来添加下拉刷新时,如果数据没有加载完毕,然后返回到上一个界面,程序就蹦了
scrollView.header = [MJChiBaoZiHeader headerWithRefreshingBlock:^{
[webView reload];
}];
个人的理解:
当你返回上一个界面时,CHGWebViewController这个控制器已经被销毁了,而数据仍然在加载中,当数据加载完毕时,
webView已经被销毁,无法接收数据,这时就会报一个野指针错误
解决方案:
解决的办法已经在代码中
scrollView.header = [MJChiBaoZiHeader headerWithRefreshingTarget:self refreshingAction:@selector(reload)];
也就是使用这个调用函数的方法添加下拉刷新
至于为什么,那就要去研究下MJ老师的框架了
先这样吧,以后找到具体原因再回来更新博客