删除观察者时,KVO观察信息丢失,导致崩溃

问题描述

发布iOS 14 beta 5后,我开始崩溃了,经典的Cannot remove an observer <XYZBinding 0x600000d6b750> for the key path "state" from <XYZEntryChat 0x7f960a77a900> because it is not registered as an observer.

但是,代码库中没有任何变化可以证明这一点,确实崩溃的代码已经有好几个月没有变化了。即使在官方的iOS 14版本中,崩溃仍然持续。

我调查并偶然发现,XYZEntryChat中的observationInfo对象应保存有关已注册观察者的信息,该对象在创建后便被释放,而无需我们的任何干预。

还有一次偶然的机会,我发现覆盖XYZEntryChat类中的- (void)setObservationInfo:(void *)observationInfo方法或observationInfo getter不再发生此问题。

在许多使用相同基本代码处理绑定的其他类中,不会发生此问题。

对于这种情况的发生,我没有进一步的线索,可能是iOS 14的错误或iOS 14上的某些行为更改,发现应用程序中的使用流程错误。我还研究了它是否与Objective-C / Swift互操作性有关,但是其他也使用/由Swift使用的类都没有问题。

有没有人遇到过这种行为或对根本原因有任何想法?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)