2017-09-29 1 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' That 's 정의 방법은 '!'이 아니라 '!'입니다. 또한 'NSError'도 없습니다 (Swift 3에서는 사용하지 마십시오). – Larme

답변

0

이 부분 : 당신이 전달하는 블록이 이미 CMAccelerometerHandler 내가 그것을 혼동하거나해야보다 더 많은 일을 방해 같은데요로

as! CMAccelerometerHandler 

이 필요는 없습니다. withHandler: 매개 변수는 함수의 마지막 매개 변수이기 때문에

나는 당신이 그것을 대체 할 수있는 엑스 코드는 경우 :

에서 잘못 ... 그것은 엑스 코드가 수행 할 수 제안 무엇 추측하지만 해요 소위 trailing closure

So. 코드를 다음으로 바꾸어보십시오.

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

희망이 있습니다.

관련 문제