您的位置:首页 > 移动开发 > IOS开发

iOS开发——常见错误——使用MJRefresh返回上一个界面蹦掉的情况

2015-08-30 13:03 639 查看
最近在使用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老师的框架了

先这样吧,以后找到具体原因再回来更新博客
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: