zoukankan      html  css  js  c++  java
  • iOS开发——常见错误——使用MJRefresh返回上一个界面蹦掉的情况

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

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

    将来的你会感谢今天如此努力的你! 版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 相关阅读:
    php环境配置中各个模块在网站建设中的功能
    PHP+Apache+MySQL+phpMyAdmin在win7系统下的环境配置
    August 17th 2017 Week 33rd Thursday
    August 16th 2017 Week 33rd Wednesday
    August 15th 2017 Week 33rd Tuesday
    August 14th 2017 Week 33rd Monday
    August 13th 2017 Week 33rd Sunday
    August 12th 2017 Week 32nd Saturday
    August 11th 2017 Week 32nd Friday
    August 10th 2017 Week 32nd Thursday
  • 原文地址:https://www.cnblogs.com/chglog/p/4770715.html
Copyright © 2011-2022 走看看