iOS开发——常见错误——使用MJRefresh返回上一个界面蹦掉的情况
2015-08-30 13:03
639 查看
最近在使用MJRefresh框架时发现了一个bug
下面是我的源代码
前一个界面
后一个界面
注意:
当你使用Block这个方法来添加下拉刷新时,如果数据没有加载完毕,然后返回到上一个界面,程序就蹦了
scrollView.header = [MJChiBaoZiHeader headerWithRefreshingBlock:^{
[webView reload];
}];
个人的理解:
当你返回上一个界面时,CHGWebViewController这个控制器已经被销毁了,而数据仍然在加载中,当数据加载完毕时,
webView已经被销毁,无法接收数据,这时就会报一个野指针错误
解决方案:
解决的办法已经在代码中
scrollView.header = [MJChiBaoZiHeader headerWithRefreshingTarget:self refreshingAction:@selector(reload)];
也就是使用这个调用函数的方法添加下拉刷新
至于为什么,那就要去研究下MJ老师的框架了
先这样吧,以后找到具体原因再回来更新博客
下面是我的源代码
前一个界面
-(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老师的框架了
先这样吧,以后找到具体原因再回来更新博客
相关文章推荐
- iOS 键盘的隐藏
- iOS --- 使用ALAssetsLibrary访问设备中的所有照片信息
- 个人学习iOS开发
- vmware workstation进入BIOS
- 彩票
- IOS ViewController
- thinkpad e330 BIOS 无法进入的故障
- iOS触摸和手势
- iOS开源大全
- iOS 自定义TabBarController
- iOS开发中frame与Bounds的区别,以及几何方法的小结
- iOS开发 - WaterflowLayout 瀑布流布局
- iOS开发 - 手势移除控制器
- iOS项目开发实战——storyboard设置界面技巧与注意事项
- iOS项目开发实战——自定义设置导航栏和状态栏背景
- [IOS]若干问题记录
- iOS9允许广告拦截 苹果或为推广自家新闻客户端
- iOS开发小白学习体验-4
- 好玩的-记最近玩的几个经典ipad ios游戏
- ios开发人员北京,上海,深圳的工资待遇是多少?