CMAccelerometerHandler thread1错误

时间:2016-09-17 04:23:30

标签: swift3

我试图尝试使用iPhone的加速度计,但我收到错误“线程1:EXC_BREAKPOINT(代码= 1,子代码= 0x1000a3734)。我读过它可能是因为断点,但我删除所有的断点,但仍然发生错误,我也读到它可能是因为一个nil变量,但即使处理程序是空的,错误仍然发生。我不知所措,我正在教自己的语言。我使用swift 3.0对此。

import UIKit
import CoreMotion

class ViewController: UIViewController {

//Variables

    var Accelx: Double = 0.0
    var Accely: Double = 0.0
    var Accelz: Double = 0.0
    var Gyrox:  Double = 0.0
    var Gyroy:  Double = 0.0
    var Gyroz:  Double = 0.0

    var motionManager = CMMotionManager()

//IBOutlets
    @IBOutlet var lblX: UILabel?
    @IBOutlet var lblY: UILabel?
    @IBOutlet var lblZ: UILabel?

    override func viewDidLoad() {
        super.viewDidLoad()
        self.resetValues()

        motionManager.accelerometerUpdateInterval = 0.2
        motionManager.startAccelerometerUpdates(to:
            OperationQueue.current!,
            withHandler:
                {(accelData: CMAccelerometerData, Error: NSError)
                    in
                    self.outputAccelData(acceleration:accelData.acceleration)
                    if(Error != nil){
                        //print("\(Error)")
                    }
                } as! CMAccelerometerHandler  )

        super.viewDidLoad()
    }

    func outputAccelData(acceleration: CMAcceleration){
        lblX?.text = "X: \(acceleration.x)"
        lblY?.text = "Y: \(acceleration.y)"
        lblZ?.text = "Y: \(acceleration.z)"
    }
} 

2 个答案:

答案 0 :(得分:2)

    //Motion Sensor
    if (motionManager.isAccelerometerAvailable){
        motionManager.startAccelerometerUpdates(
            to: OperationQueue.current!,
            withHandler: {(accelData: CMAccelerometerData?, errorOC: Error?) in
                self.outputAccelData(acceleration: accelData!.acceleration)
                    })
    }

    if (motionManager.isGyroAvailable){
        motionManager.startGyroUpdates(
            to: OperationQueue.current!,
            withHandler: { (gyroData: CMGyroData?, errorOC: Error?) in
                self.outputGyroData(gyro: gyroData!)
        })
    }

对于碰巧遇到此问题的人来说,这就是解决方案。我相信CMAccelerometerData和NSError没有被解包,并且处理程序CMAccelerometerHandler需要打开这两个。此外,我试图将匿名函数转换为处理程序。

P.S。好极了!我有一个风滚草徽章!

答案 1 :(得分:0)

处理程序的第二个参数的类型应该是Error,而不是NSError