我在使用加速度计时遇到问题,我不明白为什么我无法读取数据:
我检查加速度计是否可用:
if self.motionManager.accelerometerAvailable == true {
我启动加速度计更新:
self.motionManager.startAccelerometerUpdates()
然后我尝试读取数据,但是我收到错误:
println("data.acceleration.x is: \(self.motionManager.accelerometerData.acceleration.x)")
在解包可选值时意外发现nil
为什么会这样?
(如果我使用startAccelerometerUpdatesToQueue它可以工作,但更新太慢了)
感谢任何帮助, 谢谢
答案 0 :(得分:1)
accelerometerData
可以是nil
。它被声明为隐式解包的可选CMAccelerometerData!
,因此您应该在使用之前检查nil
:
if self.motionManager.accelerometerData != nil {
// Got it
}
答案 1 :(得分:0)
我假设self.motionManager有一个可选的后缀(即?) - 你应该安全地解开这样的变量,以避免出现意想不到的声明
var motionManager : CMAccelerometerData?
if let motionManager = self.motionManager {
println("my motion manager is \(self.motionManager.accelerometerData.acceleration.x)")
}