美文网首页iOS-进阶学习
iOS 08、代理控制器 respondsToSelector

iOS 08、代理控制器 respondsToSelector

作者: echo海猫 | 来源:发表于2018-06-13 11:15 被阅读1次

    具体问题介绍:
    在一个控制器里面设置一个代理,push到子控制器中,子控制器同样设置了相同的代理方法,导致pop回来过后,代理中的respondsToSelector找不到相应的代理方法,此问题是接收不到代理的回调方法导致的
    [****ViewController respondsToSelector:]: message sent to deallocated instance
    参考博客,自己动手解决了,博客地址:
    http://blog.sina.com.cn/s/blog_6707d8b301013e15.html
    博客的原因解析:
    某个公共类或系统提供的控件,存在delegate方法,当创建此公共控件的容器类已经销毁,
    而这个控件对应的服务是在其它run loop中进行的,控件销毁或者需要进行状态通知时,依然按照
    delegate的指针去通知,则会出现这个问题。

    主要解决方式:

    //在viewDidAppear或者viewWillAppear中设置本控制器成为代理
    -(void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
       _tool = [[Tool alloc]initWithDelegate:self];
    }
    //push到子控制器中,移除
    -(void)viewWillDisappear:(BOOL)animated{
        [super viewWillDisappear:animated];
            
        _tool = [[Tool alloc]initWithDelegate:nil];
    }
    

    相同的处理方式在子控制器中:

    //在viewDidAppear或者viewWillAppear中设置本控制器成为代理
    -(void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
       _tool = [[Tool alloc]initWithDelegate:self];
    }
    //pop回到父控制器中,移除
    -(void)viewWillDisappear:(BOOL)animated{
        [super viewWillDisappear:animated];
            
        _tool = [[Tool alloc]initWithDelegate:nil];
    }
    

    相关文章

      网友评论

        本文标题:iOS 08、代理控制器 respondsToSelector

        本文链接:https://www.haomeiwen.com/subject/htqjeftx.html