首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >玩家快速碰撞应用程序

玩家快速碰撞应用程序
EN

Stack Overflow用户
提问于 2017-09-05 09:48:42
回答 3查看 1.2K关注 0票数 0

我在我的项目中增加了播放视频的播放器-斯威夫特,但是当我弹出那个控制器应用程序时,它会与下面的日志崩溃。

由于NSRangeException异常而终止应用程序,原因是:“无法删除键路径的观察者”速率“,因为它没有注册为观察者。”

有人知道吗?我用过这个播放器https://github.com/piemonte/Player

提前谢谢!

EN

回答 3

Stack Overflow用户

发布于 2017-09-07 08:52:13

不要忘了从观察某些财产中排除危险。例如,如果您订阅了观察rate,那么就删除观察使用

代码语言:javascript
运行
复制
player.removeObserver(observer, forKeyPath: #keyPath(AVPlayer.rate))
票数 0
EN

Stack Overflow用户

发布于 2018-05-21 12:32:33

First:检查KVO基础

第二:在objective中,您可以将观察者代码移除到try-块中,并使生活愉快。苹果的导游也是这么说的:

请求作为观察员被移除,如果还没有注册为NSRangeException的话。对于相应的add观察者调用:forKeyPath:options:context:,或者如果在您的应用程序中不可行,则在应用程序中调用Remove观察者:forKeyPath:context: call,以便处理潜在的异常。

在迅捷中,没有KVO调用,您可以问,“X在观察对象Z的关键路径Y吗?”https://stackoverflow.com/a/37819004/5790492是一些解决方法。

也是删除观察者时崩溃的原因之一-- 检查。以下是这段话:

"It“指的是观察员。-removeObserver:forKeyPath:如果被告知要删除当前未注册为观察者的对象,则会引发此异常。所以正在发生的事情是,一个表视图试图从你的一个对象中注销一个观察者,不幸的是,它之前并没有注册为观察者。 造成这种情况的通常原因是,您有一个不兼容KVO的属性。某物访问您的'foo‘属性并注册为该属性的观察者,并且注册为该属性当前值的对象的观察者;您更改'foo’的值而不让任何人知道;观察者随后决定停止观察,获取'foo‘属性,并将其作为该对象的观察者移除。但它不再是它注册为观察员的那个物体了.

票数 0
EN

Stack Overflow用户

发布于 2018-05-21 12:41:22

以IBOutlet of Your UIView为例

代码语言:javascript
运行
复制
@IBOutlet var videoView:UIView!
var player:AVPlayer!

func buttonPressed()
{
    let videoURL = URL(fileURLWithPath: "your File Path")
    player = AVPlayer(url: videoURL)
    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.videoGravity = .resizeAspect
    playerLayer.frame = videoView.bounds
    videoView.layer.addSublayer(playerLayer)
    player.play()
    player.actionAtItemEnd = .none

    NotificationCenter.default.addObserver(self, selector: #selector(self.playerItemDidReachEnd(_:));, name: .AVPlayerItemDidPlayToEndTime, object: player.currentItem)
}

@objc func playerItemDidReachEnd(_ notification: Notification?)
{
    let p = notification?.object as? AVPlayerItem
    p?.seek(to: kCMTimeZero)
}
override func viewWillDisappear(_ animated: Bool)
{
    NotificationCenter.default.removeObserver(self, name: .AVPlayerItemDidPlayToEndTime, object: player.currentItem)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46051945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档