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

関連する問題