为什么 AVPlayerItem 不触发其通知?

Raf*_*ffi 5 nsnotificationcenter ios swift swift3

我已经尝试了所有AVPlayerItem通知,但没有运气......当通知应该发布时没有发生任何事情。

我正在尝试从 WKWebView 中的网站下载视频

这是我的代码,它位于 swift 3.0 中

override func viewDidLoad() {
    super.viewDidLoad()

    NotificationCenter.default().addObserver(self, selector: #selector(self.downloadAudioVisualItem), name: NSNotification.Name.AVPlayerItemNewAccessLogEntry, object: nil)
}

func downloadAudioVisualItem() {
    print("Hello")
}

override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(false)

    NotificationCenter.default().removeObserver(self)
}
Run Code Online (Sandbox Code Playgroud)

小智 0

看来您在添加观察者之前就调用了 postNotification。我的意思是应该首先调用观察者,以便只有它才能开始监听通知。

试试这个App Delegate

import AVFoundation

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        let MyGreatNotification = Notification.Name.AVPlayerItemNewAccessLogEntry
        NotificationCenter.default().addObserver(self, selector: #selector(self.hello), name: MyGreatNotification, object: nil)
        return true
    }

    func hello()
    {
      // Put break point here
    }
Run Code Online (Sandbox Code Playgroud)

并在您的初始视图控制器中添加发布通知代码,如下所示。

import AVFoundation

override func viewDidLoad() {
        super.viewDidLoad()

        let MyGreatNotification = Notification.Name.AVPlayerItemNewAccessLogEntry
        NotificationCenter.default().post(name: MyGreatNotification, object: self)
    }
Run Code Online (Sandbox Code Playgroud)

就是这样,尝试运行您的应用程序,您可以看到该应用程序将在function指定的hello位置中断App Delegate位置中断。

如果您还不确定。执行此操作,放入此发布通知代码App Delegate,并将添加观察者代码放入初始视图控制器中,添加选择器并在其中放置一个断点,尝试运行应用程序。您可以看到应用程序没有在初始视图控制器中的断点处中断。