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

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

你可能感兴趣的:([iOS]viewWillAppear:和viewWillDisappear:的不平衡调用)