Добавить и удалить наблюдателя из нескольких AVPlayerItem на UITableViewCell
я пытаюсь сделать табличное представление, которое воспроизводит несколько видео сAVPlayer
а такжеAVPlayerItem
и мне нужно было добавитьObserver к каждомуAVPlayerItem
так что я могу отслеживать свойство playLikelyToKeepUp
то, что я пытался и не смог добавить наблюдателя после установкиAVPlayerItem
и удалив его вdeinit
изUITableViewCell
но так как клетки никогда не освобождаются, а удаляются, так что это не сработает, и я получу эту ошибку
An instance 0x14eedebc0 of class AVPlayerItem was
deallocated while key value observers were still registered with it.
После поиска я придумал это
Я не должен добавлять или удалять наблюдателей наUITableViewCell
но я должен был, потому что элемент игрока сделан в подклассе ячейкиЛучший способ обработки наблюдателя - это методы UITableViewDelegate.Добавление вwillDisplayCell
и удаление вdidEndDisplayingCell
но даже это не работает в моем случае, потому чтоAVPlayerItem
требуется время для инициализации
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TableViewCell
cell.setUpPLayer()
return cell
}
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
let cell = cell as! TableViewCell
if cell.Player == nil {
self.addObserversToCell(cell)
}
}
override func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
let cell = cell as! TableViewCell
self.removeMyObserversFromCell(cell)
}
поэтому наблюдатель не будет добавлен вwillDisplayCell
но удаление наблюдателя будет вызвано и вызовет ошибку времени выполнения с
'Cannot remove an observer <AVFPlayer.TableViewCell 0x13cf1e9b0> for
the key path "playbackLikelyToKeepUp"
<AVPlayerItem0x13cf31860> because it is not registered as an observer.'
если кто-нибудь знает, как этого добиться, я был бы рад узнать? Спасибо