Как установить AVPlayerItem на ноль, когда наблюдатель не завершает
Я добавляю наблюдателя с именем 'status' в AVPlayerItem. Отправьте наблюдателя, затем установите AVPlayerItem на ноль, когда наблюдатель не завершит
Я должен удалить наблюдателя, когда Deloloc AVPlayerItem
Получите следующую ошибку:
NSInternalInconsistencyException ', причина: ' Экземпляр 0x7dc5e7d0 класса AVPlayerItem был освобожден, в то время как наблюдатели значения ключа все еще были зарегистрированы в нем. Информация о текущем наблюдении: (Контекст: 0x0, Свойство: 0x7b8ad140>
3 ответа
Я не верю AVPlayerItem
надо что-то наблюдать, трудно сказать в твоем случае без конкретного примера. Обычно потоком для этого будет то, что ваш контроллер будет наблюдателем при некотором уведомлении от AVPlayerItem
,
Например:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movieItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:nil];
Затем, когда вы закончите (т.е. когда вы устанавливаете AVPlayerItem в nil
), вы удаляете наблюдателя:
[[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
Если вы предоставите более подробную информацию, может быть, я могу помочь больше. Спасибо!
Редактировать:
В скором времени это будет...
NSNotificationCenter.defaultCenter().addObserver(self, selector: "movieDidReachEnd", name: AVPlayerItemDidPlayToEndTimeNotification, object: nil)
NSNotificationCenter.defaultCenter().removeObserver(self, name: AVPlayerItemDidPlayToEndTimeNotification, object: nil)
Перед тем как установить playerItem на ноль, удалите наблюдателя:
playerItem.removeObserver(self, forKeyPath: "status")
Если вы подождете до deinit/dealloc, после того как вы уже установили playerItem на nil, у вас больше не будет ссылки на него, чтобы удалить наблюдателей.