写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中
我目前使用第一种方法。有小伙伴知道更好的方法吗,欢迎留言
网友评论