读取加速度计数据时发现为零
Posted
技术标签:
【中文标题】读取加速度计数据时发现为零【英文标题】:found nil when reading accelerometer data 【发布时间】:2015-03-16 11:09:23 【问题描述】:我在使用加速度计时遇到问题,我不明白为什么我无法读取数据:
我检查加速度计是否可用:
if self.motionManager.accelerometerAvailable == true
我开始加速计更新:
self.motionManager.startAccelerometerUpdates()
然后我尝试读取数据但出现错误:
println("data.acceleration.x is: \(self.motionManager.accelerometerData.acceleration.x)")
在展开可选值时意外发现 nil
为什么会这样?
(如果我使用 startAccelerometerUpdatesToQueue 它可以工作,但更新太慢)
任何帮助表示赞赏, 谢谢
【问题讨论】:
【参考方案1】:accelerometerData
可以是 nil
如果没有可用的。它被声明为隐式展开的可选CMAccelerometerData!
,因此您应该在使用它之前检查nil
:
if self.motionManager.accelerometerData != nil
// Got it
【讨论】:
谢谢。该错误现在没有发生,但我没有得到任何数据。为什么? 我不确定。如果您调用了startAccelerometerUpdates()
,那么一旦有一些数据可用,它应该可以工作。
是的,我就是这么想的。但什么都没有发生。难以置信【参考方案2】:
我假设 self.motionManager 有一个可选的后缀(即?) - 你应该像这样安全地解包变量,以避免任何意外的嘘声
var motionManager : CMAccelerometerData?
if let motionManager = self.motionManager
println("my motion manager is \(self.motionManager.accelerometerData.acceleration.x)")
【讨论】:
谢谢。您的代码给了我以下错误:“条件绑定中的绑定值必须是可选类型” 啊,这意味着你的运动管理器已经被打开了。 @MaRco85,用 ? 实例化它而不是!。然后用 if let 语句打开它。以上是关于读取加速度计数据时发现为零的主要内容,如果未能解决你的问题,请参考以下文章
为啥从 STM32F407G-Disc1 MCU 上的 LIS3DSH 加速度计读取时我只得到 0xFF?
手机加速度计数据可以被随意读取,iOS关不掉权限,安卓这次能限制