2017-09-29 38 views
0

这里是我做了什么:我正在尝试安装coreMotion,并在加速处理程序中出现此错误?

 motion_manager.startAccelerometerUpdates(to: OperationQueue.current! , withHandler: { (AccelerometerData : CMAccelerometerData! , error : NSError!) -> Void 

      in 

       self.output_acceleratoin_data(acceleration: AccelerometerData.acceleration) 
       if (error != nil){ 

        print("\(error)") 
       } 



       } as! CMAccelerometerHandler ) 
       //the above line is where I get the error 







func output_acceleratoin_data(acceleration : CMAcceleration){ 

      print("\(acceleration.x) 2f ") 
      print("\(acceleration.y) 2f ") 
      print("\(acceleration.z) 2f ") 

    } 

误差以下螺纹:Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

和之前的任何东西显示在屏幕上的应用程序得到坠毁。任何想法我怎么能解决这个问题?

+0

也许有关...... https://stackoverflow.com/questions/26637040/exc-bad-instruction-in-swift?rq=1 –

+0

'typealias CMAccelerometerHandler =(CMAccelerometerData?,Error?) - > Void'这就是它是如何定义的,使用'?'而不是'!'。另外,没有'NSError'(在Swift 3中避免它们)。 – Larme

回答

0

这部分:为你传递块已经是一个CMAccelerometerHandler,我猜它混淆或扰乱事情更比它应该

as! CMAccelerometerHandler 

不应该是必要的。

我猜它是什么的Xcode建议你做的,但... Xcode的是错误在这种情况下:)

由于withHandler:参数是函数的最后一个参数,你可以用它代替所谓的trailing closure

所以。尝试用此替换您的代码:

motion_managerstartAccelerometerUpdates(to: OperationQueue.current!) { (data, error) in 
    self.output_acceleratoin_data(acceleration: AccelerometerData.acceleration) 
    if (error != nil){ 
     print("\(error)") 
    } 
} 

希望有所帮助。

相关问题