最近在使用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. JDBC编程的方式

    JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: 从上面可以看出JDBC编程一般要如下步骤: 1. 加载数据库驱动 2. 创建并获取数据库连接 3. 创建jdbc stateme ...

  2. Tomcat 的三种(bio,nio.apr) 高级 Connector 运行模式及apr配置

    转: http://www.oschina.net/question/54100_16195omcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志. ...

  3. SQL查询效率:100w数据查询只需要1秒钟

    G os: windows 数据库: ms sql server 目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by step -- setp . -- 建表 create ta ...

  4. 自然语言18.2_NLTK命名实体识别

    QQ:231469242 欢迎nltk爱好者交流 http://blog.csdn.net/u010718606/article/details/50148261 NLTK中对于很多自然语言处理应用有 ...

  5. MySQL学习笔记——索引和视图

    索引(index)和管理索引 模式中的一个数据库对象 作用:在数据库中用来加速对表的查询 创建:自动在主键和唯一键上面创建索引 通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O 与表独立存放, ...

  6. Nginx环境下http和https可同时访问方法

    给nginx配置SSL证书之后,https可以正常访问,http访问显示400错误,nginx的配置如下: server { listen 80 default backlog=2048; liste ...

  7. C++ typedef用法小结 (※不能不看※)

    C++ typedef用法小结 (※不能不看※) 第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不 ...

  8. cmd 导出目录树

    cmd: tree /f >tree.txt

  9. memcached命令行操作详解,命令选项的详细解释

    连接到memcached命令行下:  telnet 127.0.0.1 11211 1.set / add / replace : 格式:<command> <key> < ...

  10. JSP-Servlet的工作流程

    Servlet基础 1.Servlet概述 JSP的前身就是Servlet.Servlet就是在服务器端运行的一段小程序.一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问 ...