美文网首页
[iOS]viewWillAppear:和viewWillDis

[iOS]viewWillAppear:和viewWillDis

作者: Mousses | 来源:发表于2017-11-03 16:07 被阅读66次

    写APP时遇到了一个由viewWillAppear:和viewWillDisappear调用不平衡导致的crash

    事情是这样的,我有一个ContainerViewController,简称Container,和两个ChildViewController在这个Container中;其中一个Child使用了KVC机制观察另一个对象;然后我在Container的viewWillAppear中根据某些条件使用了跳转函数:

        transitionFromViewController:toViewController:duration:options:animations:completion:
    

    然后在使用了KVC的Child的viewWillDisappear中就崩了,就像这样:

    -(void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
        [self.tableView reloadData];
        [dataManager.onlineData addObserver:self forKeyPath:@"vehicleList" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
    }
    
    -(void)viewWillDisappear:(BOOL)animated
    {
        [super viewWillDisappear:animated];
        //crash:
        //在parentViewController的viewWillAppear:中使用了transitionFromViewController...
        //操作导致此VC的viewWillAppear:不被调用
        //当此VC的视图被移除时,此处崩溃(没有添加observer)
        [dataManager.onlineData removeObserver:self forKeyPath:@"vehicleList"];
    }
    

    解决方案

    我想到了两种:
    1.将转换的调用放到Container的viewDidAppear中
    2.将KVO的添加和删除分别放到viewDidLoad和dealloc中

    我目前使用第一种方法。有小伙伴知道更好的方法吗,欢迎留言

    相关文章

      网友评论

          本文标题:[iOS]viewWillAppear:和viewWillDis

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