我试图尝试使用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)"
}
}
答案 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
。