[iOS]viewWillAppear:和viewWillDisappear:的不平衡调用

写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中

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容