【问题标题】: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 它可以工作,但更新太慢)

任何帮助表示赞赏, 谢谢

【问题讨论】:

    标签: ios swift accelerometer


    【解决方案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 语句打开它。
    猜你喜欢
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    相关资源
    最近更新 更多