我正在使用GitHub的这个项目播放360视频:https://github.com/Aralekk/simple360player_iOS
我想根据最近的信标来播放来自网址的特定视频。我在那里添加了这些属性:
var minorOfClosestBeacon = Int()
var playVideo = String()
let urls = [
40018: "url1",
38474: "url2",
60220: "url3"
]
我的didRangeBeacons功能如下所示:
func beaconManager(manager: KTKBeaconManager, didRangeBeacons beacons: [CLBeacon], inRegion region: KTKBeaconRegion) {
print("Did ranged \"\(beacons.count)\" beacons inside region: \(region)")
if beacons.count == 0 {
userInfoView.hidden = false
}
if let closestBeacon = beacons.sort({ $0.0.accuracy < $0.1.accuracy }).first where closestBeacon.accuracy > 0 {
print("Closest Beacon is M: \(closestBeacon.major), m: \(closestBeacon.minor) ~ \(closestBeacon.accuracy) meters away.")
minorOfClosestBeacon = closestBeacon.minor.integerValue
let videoToPlay = self.urls[minorOfClosestBeacon]!
if playVideo != videoToPlay {
playVideo = videoToPlay
play(playVideo)
print("Playing video: \(playVideo)")
userInfoView.hidden = true
} else {
userInfoView.hidden = true
}
}
}
当我在那里打印playVideo时,它会打印出正确的值,但不会播放视频。当第一个最近的信标是urls数组中的第一个时,它只是没有播放,但是当它是第二个或第三个时,它会为url输出正确的值,但在那个致命错误之后:在解开一个Optional值时意外地找到了nil 。 那里应该有什么问题?
答案 0 :(得分:0)
我怀疑fatal error: unexpectedly found nil while unwrapping an Optional value.
是由这行中的爆炸引起的:
let videoToPlay = self.urls[minorOfClosestBeacon]!
我会将其替换为:
if let videoToPlay = self.urls[minorOfClosestBeacon] {
// Put the rest of your code here
...
}
else {
print "No video found for minor \(minorOfClosestBeacon)"
}
很难说为什么视频在没有看到play
方法的内容的情况下无法播放。也许您需要在主线程上运行它:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
play(playVideo)
}
我会验证play
方法调用本身是否使用硬编码的url,然后才能使用所有beacon逻辑。