2017-09-29 60 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)") 
    } 
} 

希望有所幫助。

相關問題