2016-09-30 1 views
1

Ich habe eine für Online-Audiostream & AVQueuePlayer für die Offline-Warteschlange, um mehrere Lieder zu spielen.Erkenne den Unterschied zwischen AVPlayer und AVQueuePlayer KVO

MyCode

self.myQueuePlayer?.addObserver(self, forKeyPath: "timedMetadata", options: NSKeyValueObservingOptions.new, context: nil) 

myPlayer.currentItem?.addObserver(self, forKeyPath: "timedMetadata", options: [.new,.old,.initial], context: nil) 

Wie kann ich Beobachter KVO für "timedMetadata" & get ist es AVPlayer oder AVQueuePlayer?

Antwort

0

können Sie das Kontext Argument verwenden, um zwischen verschiedenen KVO Objekten zu unterscheiden:

// class 
private var playerContext = 0 
private var queuePlayerContext = 0 

func setup() { 
    self.myQueuePlayer?.addObserver(self, forKeyPath: "timedMetadata", options: .new, context: &queuePlayerContext) 
    myPlayer.currentItem?.addObserver(self, forKeyPath: "timedMetadata", options: .new, context: &playerContext) 
} 

override open func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
    guard let context = context else { 
     return 
    } 

    if keyPath == "timedMetadata" { 
     switch context { 
     case &queuePlayerContext: 
      print("queuePlayer") 
     case &playerContext: 
      print("playerContext") 
     default: 
      break 
     } 
    } 
} 
Verwandte Themen