iOS表视图错误-在键值观察器仍向其注册时解除分配-DGElasticPullToRefresh

iOS表视图错误-在键值观察器仍向其注册时解除分配-DGElasticPullToRefresh,ios,iphone,swift,uitableview,uiviewcontroller,Ios,Iphone,Swift,Uitableview,Uiviewcontroller,所以我有两个UIViewController,每个都有一个表视图。第一个视图有一个按钮,用于显示第二个视图控制器。第二个视图控制器有一个按钮,用于解除视图控制器,使其返回到第一个视图控制器。当我单击第二个视图控制器中的“关闭”按钮时,它会短暂返回到第一个视图控制器,然后崩溃。控制台打印以下错误消息 类UIScrollViewPanGestureRecognizer的一个实例被解除分配,而键值观察者仍在该实例中注册 我不确定从哪里开始寻找,因为我不确定问题出在哪一部分。我以前从未遇到过这个错误,而

所以我有两个UIViewController,每个都有一个表视图。第一个视图有一个按钮,用于显示第二个视图控制器。第二个视图控制器有一个按钮,用于解除视图控制器,使其返回到第一个视图控制器。当我单击第二个视图控制器中的“关闭”按钮时,它会短暂返回到第一个视图控制器,然后崩溃。控制台打印以下错误消息

类UIScrollViewPanGestureRecognizer的一个实例被解除分配,而键值观察者仍在该实例中注册

我不确定从哪里开始寻找,因为我不确定问题出在哪一部分。我以前从未遇到过这个错误,而且它毫无意义,因为我没有使用任何
UIScrollViewPangTestureRecognitor
。我甚至没有意识到我正在使用的任何
观察者

我用下面的代码展示这个视图

let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let menuViewController : UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "Menu") as UIViewController
self.present(menuViewController, animated: false, completion: nil)
self.dismiss(animated: false, completion: {});
并使用以下代码解除视图控制器

let mainStoryboard = UIStoryboard(name: "Main", bundle: Bundle.main)
let menuViewController : UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "Menu") as UIViewController
self.present(menuViewController, animated: false, completion: nil)
self.dismiss(animated: false, completion: {});
这个错误意味着什么?是什么原因造成的呢?我在stack overflow上看到的所有答案都使用了我根本没有类似的代码,这就是为什么我非常困惑的原因


根据我的研究,我很确定它与我的一个表视图有关,但我可能完全错了。

在做了更多的研究后,我发现将以下代码添加到我的第二个视图控制器解决了这个问题

deinit {
    self.tableView.dg_removePullToRefresh()
}

这是因为我使用库()来处理拉刷新。可以找到与此相关的GitHub问题。希望这能帮助其他有类似问题或类似问题的人。

我先回顾一下。我发现的大多数问题包括添加一个观察者,比如UITableViewCell或类似的问题。当我没有添加一个观察者并且不知道关键路径是什么时,我不知道如何删除它。我的意思是我发现了这个
removeObserver(self,forKeyPath:“frame”)
code,但我不确定关键路径是什么,或者我把它放在哪里。就像我假设它会进入UITableViewCell
deinit
方法一样。看起来事情还是不对劲。你在视图中做的事情会出现吗?从第一个控制者那里?@JoséNeto Nope。两个视图控制器均未显示视图。只有viewDidLoad。您在哪里使用Disclose函数?我不得不采取额外的步骤,保留对表视图的第二个强引用。我使用的是一个IBOutlet,我想它在Denit被调用之前就被释放了。