Hinzufügen und Entfernen des Beobachters von mehreren AVPlayerItem in UITableViewCell
Ich versuche, eine Tabellenansicht zu erstellen, die mehrere Videos mit @ wiedergibAVPlayer
undAVPlayerItem
und ich musste zu jedem @Observer hinzufügAVPlayerItem
so kann ich die PlaybackLikelyToKeepUp-Eigenschaft verfolgen
was ich versuchte und fehlschlug, fügt den Beobachter hinzu, nachdem das @ eingestellt worden iAVPlayerItem
und entfernen Sie es in derdeinit
desUITableViewCell
aber da die Zellen nie freigegeben werden, sondern in die Warteschlange gestellt werden, funktioniert dies nicht und ich erhalte diesen Fehler
An instance 0x14eedebc0 of class AVPlayerItem was
deallocated while key value observers were still registered with it.
Nach der Suche habe ich mir dieses @ ausgedac
Ich sollte keine Beobachter auf @ hinzufügen oder entfernUITableViewCell
aber ich musste, weil der Spieler Artikel in der Zelle Unterklasse gemacht wird Der beste Weg, um mit Beobachtern umzugehen, sind die Methoden von 'UITableViewDelegate'Adding inwillDisplayCell
und entfernen indidEndDisplayingCell
aber auch das geht in meinem fall nicht weilAVPlayerItem
braucht Zeit, um initialisiert zu werden
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)
}
so wird der Beobachter nicht in das @ aufgenommwillDisplayCell
aber das Entfernen des Observers wird aufgerufen und verursacht einen Laufzeitfehler mit
'Cannot remove an observer <AVFPlayer.TableViewCell 0x13cf1e9b0> for
the key path "playbackLikelyToKeepUp"
<AVPlayerItem0x13cf31860> because it is not registered as an observer.'
wenn jemand weiß, wie man das erreicht, würde ich mich freuen zu wissen? Vielen Dan