2017-08-16 4 views
0

Je dois observer AVPlayer.status changer.KVO AVPlayer.status dans Swift

J'ai un AVPlayer instance et un contexte variables

private var lastPlayer : AVPlayer? 
private var playerStatusContext = 0 

Après que je l'ai mis en place la AVPlayer exemple ajouter un observateur comme ceci:

// KVO status property 
self.lastPlayer!.addObserver(self, forKeyPath: "status", options: [.new, .initial], context: &playerStatusContext) 

Ensuite, j'ai remplacé observerValeur fonctionnent comme si:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) 
{ 
    let status : AVPlayerStatus? = change?[.newKey] as? AVPlayerStatus 
    if(status != nil && context == &playerStatusContext) 
    { 
     // DO MY STUFF 
    } 
} 

Le problème est que changement est soit 0 dictionnaire clé/valeur ou un (quoi que cela signifie) et mon statut locale constante est toujours nulle, hense je peux » Je fais mes trucs.

Peut-être que je suis en train de convertir changement à AVPlayerStatus tort? S'il vous plaît aider. Merci.

+0

Imprime 'change' dans la méthode' observeValue'. Que vois-tu? – rmaddy

Répondre

1

Eh bien, il semble que ce casting comme

let status : AVPlayerStatus? = change?[.newKey] as? AVPlayerStatus 

ne fonctionne pas. L'application s'est écrasée quand elle a essayé de vérifier le changement pour zéro, puis forcer le déplier. L'utilisation de valeurs brutes a aidé:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) 
{ 
    // Check status 
    if keyPath == "status" && context == &playerStatusContext && change != nil 
    { 
     let status = change![.newKey] as! Int 
     // Status is not unknown 
     if(status != AVPlayerStatus.unknown.rawValue) 
     { 
      // DO STUFF!!! 
     } 
    } 
} 

Je ne suis pas sûr que ce soit le meilleur moyen cependant.

+0

let status = AVPlayerStatus (rawValue: change! [. Nouvelle clé] as! Int)! – CMash

+0

Version d'Apple: https://developer.apple.com/documentation/avfoundation/avplayeritem – CMash