为什么我没有收到任何加速度计更新?

Tre*_*vör 1 ios core-motion swift

我正在尝试使用 CoreMotion 和 Swift 获取加速度计更新,这是我放置在 viewDidLoad 中的内容:

override func viewDidLoad() {
    super.viewDidLoad()
    let motionManager = CMMotionManager()
    motionManager.accelerometerUpdateInterval = 0.2
    motionManager.startAccelerometerUpdatesToQueue(NSOperationQueue.currentQueue()) {
        (info:CMAccelerometerData!,error:NSError!) in
        if error != nil {
            println(error)
        }
        else {
            println("OK")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,看起来我的闭包从未被调用(我控制台中没有任何内容),你知道为什么吗?

mat*_*att 5

问题在于,motionManager您的 CMMotionManager 实例分配给的变量 被声明为局部变量(在函数体内viewDidLoad),这意味着当函数执行完毕时,该变量将不存在。因此它的寿命大约是万分之一秒。

好吧,这对于您的 CMMotionManager 获取大量更新来说还不够长!

  • 如果您不了解变量生命周期,您可能需要阅读我刚刚编写的 Swift 教程的这一部分:http://www.apeth.com/swiftBook/ch03.html#_variable_scope_and_lifetime (2认同)