读取加速度计数据时发现为零

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关不掉权限,安卓这次能限制

为啥 Windows 8.1 加速计 API 在设备静止时不输出数据?

读取文件时无法使用 OpenMP 获得加速

ESP8266 读取MPU-6050数据OLED显示

如何使用 Android 加速度计?