最近在使用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老师的框架了

先这样吧,以后找到具体原因再回来更新博客

iOS开发——常见错误——使用MJRefresh返回上一个界面蹦掉的情况的更多相关文章

  1. Android - 返回上一个界面finish()方法

    返回上一个界面finish()方法 本文地址: http://blog.csdn.net/caroline_wendy Android能够使用finish()方法,实现函数返回的功能.当不是Activ ...

  2. Android 重写物理返回键,在h5页面中返回上一个界面

    实现:Activity中放置webview,跳转到h5界面,点击返回键,不退出h5界面,而是返回上一个h5界面 /** * 改写物理按键--返回的逻辑,希望浏览的网页后退而不是退出浏览器 * @par ...

  3. iOS开发 常见错误

    一.NSAppTransportSecurity 错误提示:NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL ...

  4. iOS开发常见错误(转)

    //大全 //读取数据库数据 -(void)movethesqlitefile{ NSString *sourcepath=[[NSBundle mainBundle]pathForResource: ...

  5. iOS开发常见错误解决方法

    1.出现下面的错误: StoryboardApp[8593:207] Failed to instantiate the default view controller for UIMainStory ...

  6. IOS开发常见错误

    . 问题表现:什么情况?方法居然无法拉线? 问题简述:ios的空间拉线到一个.h .m文件中 居然多次拖动无效.. 问题解决:ios的空间响应单单在代码中创建一个方法是没用的,这个时候通常跟空间是没有 ...

  7. IOS开发常见错误整理

    1.Cannot create an NSPersistentStoreCoordinator with a nil model 这是在执行到这段代码时引发的: - (void)viewDidLoad ...

  8. ios7--系统自带的向右滑动手势返回上一个界面

    当从控制器A push到控制器B,我们返回控制器A,除了使用按钮返回 [self.navigationController pushViewController:Vc animated:YES]; 还 ...

  9. iOS开发之自定义导航栏返回按钮右滑返回手势失效的解决

    我相信针对每一个iOS开发者来说~除了根视图控制器外~所有的界面通过导航栏push过去的界面都是可以通过右滑来返回上一个界面~其实~在很多应用和APP中~用户已经习惯了这个功能~然而~作为开发者的我们 ...

随机推荐

  1. Node-webkit简介

    Node-webkit 概述 Node-webkit 是Github 上一个非常热门的开源项目,它基于著名的浏览器开源项目 Chromium 和服务器端 JavaScript 实现 Node.js 的 ...

  2. JavaScript---认识JavaScipt

    认识JavaScript 1.什么是JavaScript? JavaScript是属于网络的脚本语言,她被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies以及更多的应用,她更是因特 ...

  3. python 动态调用模块、类、方法(django项目)

    需求:近一段时间基于django框架,开发各业务层监控代码,每个业务的监控逻辑不同,因此需要开发监控子模块,动态的导入调用. 项目名称:demo_django App:common_base.moni ...

  4. CSS3-border-radius的兼容写法大全

    <!DOCTYPE html><html lang="zh-cn"><head> <meta charset="utf-8&qu ...

  5. UI学习之常用方法

    1.-(BOOL) respondsToSelector: selector 用来判断是否有以某个名字命名的方法(被封装在一个selector的对象里传递) if ([delegate respond ...

  6. 之前总结的今天给大分享一下iOS

    退回输入键盘 苹果 ios 开发一年的工作笔记 - (BOOL) textFieldShouldReturn:(id)textField{ [textField resignFirstResponde ...

  7. uC/OS-II全局变量定义

    /*************************************************************************************************** ...

  8. telnet连接ip

    win7 telnet命令无法开启的解决方案(不是内部命令或外部命令) 出处:西西整理 作者:西西 日期:2012-12-21 14:22:06 [大 中 小] 评论: 0 | 我要发表看法 如果你想 ...

  9. 股市非常态,CCI指标买卖点实例图解

    CCI指标即顺势指标,是唐纳德·蓝伯特于上世纪80年代提出的,是一种比较新颖的技术指标.CCI指标是专门用来衡量股价是否超出常态分布范围,是一种 超买超卖类指标,但它与其他超买超卖型指标又有自己比较独 ...

  10. HTTP2.0的二进制分帧

    1.帧的类型: 在二进制分帧的结构中,头部有8个字节(64Bit),其中有一个字节(8Bit)来标志帧的类型: HTTP2.0规定了如下帧类型: DATA: 用于传输HTTP消息体 HEADERS:用 ...