Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 移除UIPageViewController中的循环AVPlayer观察者_Ios_Swift_Xcode_Mobile - Fatal编程技术网

Ios 移除UIPageViewController中的循环AVPlayer观察者

Ios 移除UIPageViewController中的循环AVPlayer观察者,ios,swift,xcode,mobile,Ios,Swift,Xcode,Mobile,大家好,我在UIPageViewController和通知方面遇到了问题 我有一个PageUIPageVEWController和一组页面,因此在这些页面中,我有一个AVplayer在循环中播放,如下所示: func loopVideo(videoPlayer:AVPlayer){ NotificationCenter.default.addObserver(forName: NSNotification.Name.AVPlayerItemDidPlayToEndTime, objec

大家好,我在UIPageViewController和通知方面遇到了问题

我有一个PageUIPageVEWController和一组页面,因此在这些页面中,我有一个AVplayer在循环中播放,如下所示:

 func loopVideo(videoPlayer:AVPlayer){
    NotificationCenter.default.addObserver(forName: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil, queue: nil){
        [weak videoPlayer] notification in
        videoPlayer?.seek(to: kCMTimeZero)
        videoPlayer?.play()
    }
}
问题是当我使用滚动更改页面时,来自其他页面的通知会更改我当前的视频播放器。我在通知中添加了一个打印,我可以看到调用其他页面通知。我不知道我该怎么办

我尝试使用NotificationCenter.default.removeObserver(self)删除视图中的通知,但没有成功

你能帮我吗


谢谢

收到通知后,您只需检查一下即可

检查作为
AVPlayerItem
的通知对象是否与可视视图播放器
playerItem
videoPlayer.currentItem

或者只需检查通知中的
AVPlayerItem
是否与
yourCustomView.playerItem

编辑:


我看你的对象是零,应该是AVPlayerItem

NotificationCenter.default.removeObserver(self)
在此处不起作用,因为您从未将自己添加为目标

而是保留对通知的引用并将其删除。我认为应该是这样的:

var notificationObserver:NSObjectProtocol?

func loopVideo(videoPlayer:AVPlayer){
    self.notificationObserver = NotificationCenter.default.addObserver(forName: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil, queue: nil){
        [weak videoPlayer] notification in
        videoPlayer?.seek(to: kCMTimeZero)
        videoPlayer?.play()
    }
}

func removeObserver() {
    NotificationCenter.default.removeObserver(self.notificationObserver)
}

谢谢你,就像你说的那样,我解决了插入player.currentItem的问题。非常感谢,亲爱的!我理解詹姆斯P谢谢你的回答我现在能更好地理解了。我用@sleek的答案解决了这个问题。