Застрял в KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED - PullRequest
0 голосов
/ 17 мая 2018

Я использую новый Swift 4 API и получаю KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED недетерминированным образом.Кто-нибудь смог это исправить?Код довольно прост, создав KVO и сохранив его в локальной переменной.

private var rateObservation: NSKeyValueObservation?

rateObservation = player.observe(\AVQueuePlayer.rate, options: [.initial, .new]) { (_, change) in
   observer(change.newValue)
}

1 Ответ

0 голосов
/ 17 мая 2018

Ответ не имеет смысла для меня. Но это единственный способ заставить меня работать.

deinit {
    rateObservation?.invalidate()
}

Не имеет смысла, потому что в документации нового наблюдения ясно сказано, что нам не нужно отменять регистрацию уведомления, и это работает почти все время, но иногда я получал упомянутое исключение, и когда я явно лишил законной силы наблюдатель это никогда не выбрасывает исключение.

...