Добавление Обозревателя в UICollectionViewCell. Получение исключения KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED - PullRequest
0 голосов
/ 10 января 2019

Я добавляю наблюдателя в UICollectionViewCell, у которого есть AVPlayer для получения продолжительности воспроизводимого элемента.

addObserver(self, forKeyPath: #keyPath(player.currentItem.duration), options: [.new, .initial], context: &playerViewControllerKVOContext)

Удаление наблюдателя методом deinit.

removeObserver(self, forKeyPath: #keyPath(player.currentItem.duration), context: &playerViewControllerKVOContext)

Получение исключения случайным образом говоря

KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED

Кто-нибудь сталкивался с подобной проблемой?

1 Ответ

0 голосов
/ 10 января 2019

Прежде чем вы сможете добавить своих наблюдателей, убедитесь, что вы удалили добавленных наблюдателей.

Аналогично, сделайте две функции для добавления и удаления наблюдателей, как

Добавить наблюдателей

func addObserver() { 
   addObserver(self, forKeyPath: #keyPath(player.currentItem.duration), options: [.new, .initial], context: &playerViewControllerKVOContext)

}

Удалить наблюдателей

func removeObservers() {
     removeObserver(self, forKeyPath: #keyPath(player.currentItem.duration), context: &playerViewControllerKVOContext)

}

Обязательно вызовите removeObserver (), прежде чем делать вызовы addObserver ()

Удачного кодирования!

...