Adicionar e remover observador de vários AVPlayerItem em UITableViewCell
Estou tentando fazer uma exibição de tabela que reproduz vários vídeos comAVPlayer
eAVPlayerItem
e eu precisava addObserver para cadaAVPlayerItem
para que eu possa acompanhar a propriedade playbackLikelyToKeepUp
o que eu tentei e falhei foi adicionar o observador depois de definir oAVPlayerItem
e removê-lo nodeinit
doUITableViewCell
mas como as células nunca são desalocadas, mas são desenfileiradas, isso não funcionará e eu receberei esse erro
An instance 0x14eedebc0 of class AVPlayerItem was
deallocated while key value observers were still registered with it.
Depois de pesquisar, eu vim com isso
Não devo adicionar ou remover observadores emUITableViewCell
mas eu tive que fazer porque o item do jogador é feito na subclasse da célulaA melhor maneira de lidar com o observador é nos métodos 'UITableViewDelegate'AdicionandowillDisplayCell
e removendodidEndDisplayingCell
mas mesmo isso não funciona no meu caso porqueAVPlayerItem
leva tempo para ser inicializado
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)
}
para que o observador não seja adicionado nowillDisplayCell
mas remover o observador será chamado e causará erro de tempo de execução com
'Cannot remove an observer <AVFPlayer.TableViewCell 0x13cf1e9b0> for
the key path "playbackLikelyToKeepUp"
<AVPlayerItem0x13cf31860> because it is not registered as an observer.'
se alguém souber como conseguir isso, eu ficaria feliz em saber? obrigado