Agregar y eliminar observador de múltiples AVPlayerItem en UITableViewCell
Estoy tratando de hacer una vista de tabla que reproduzca varios videos conAVPlayer
yAVPlayerItem
y necesitaba agregar observador a cadaAVPlayerItem
para poder hacer un seguimiento de la propiedad de reproducción Probable de mantenimiento
lo que probé y fallé es agregar el observador después de configurar elAVPlayerItem
y quitándolo en eldeinit
delUITableViewCell
pero dado que las celdas nunca se desasignan, sino que se eliminan, por lo que esto no funcionará y obtendré este error
An instance 0x14eedebc0 of class AVPlayerItem was
deallocated while key value observers were still registered with it.
Después de buscar se me ocurrió esto
No debería agregar o eliminar observadores enUITableViewCell
pero tuve que hacerlo porque el elemento del jugador está hecho en la subclase de celdaLa mejor manera de manejar el observador es dentro de los métodos 'UITableViewDelegate'Agregando enwillDisplayCell
y quitando endidEndDisplayingCell
pero incluso eso no funciona en mi caso porqueAVPlayerItem
toma tiempo 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 el observador no se agregue en elwillDisplayCell
pero se eliminará al observador y provocará un error de tiempo de ejecución con
'Cannot remove an observer <AVFPlayer.TableViewCell 0x13cf1e9b0> for
the key path "playbackLikelyToKeepUp"
<AVPlayerItem0x13cf31860> because it is not registered as an observer.'
si alguien sabe cómo lograr esto, me encantaría saberlo. Gracias