CMDeviceMotion возвращает 0 значений для магнитного поля

Я занимаюсь разработкой приложения для iOS с компасом. Я пытался использоватьCMMagnetometerData обновления, которые дают некалиброванные, но нормальные результаты.

После этого я попытался получитьCMDeviceMotion обновления, которые, как оказалось, дают всегда нулевое магнитное поле сCMMagneticFieldCalibrationAccuracyUncalibrated точность. Единственное устройство, которое у меня есть, это iPad, поэтому не могу тестировать на других.

Возможно, поле равно нулю, потому что датчик не откалиброван, но я не смог найти способ выполнить калибровку.

Как это исправить?

ОБНОВИТЬ:

Вот предлагается использоватьstartDeviceMotionUpdatesUsingReferenceFrame:toQueue:withHandler:Однако это не сработало для меня.

Вот предлагается установитьshowsDeviceMovementDisplay вtrue, Однако это тоже не сработало, окна калибровки просто не появляются.

В заключение,РЕШИТЬ, По моим наблюдениям:

1) ИспользованиеstartDeviceMotionUpdatesUsingReferenceFrame:toQueue:withHandler: сreferenceFrame Не равноallZeros или жеXArbitraryZVertical.

2) УстановитьshowsDeviceMovementDisplay вtrue.

После нескольких обновлений с нулевым значением с точностьюCMMagneticFieldCalibrationAccuracyUncalibrated это нормализуется.

КОД:

...
motionManager.deviceMotionUpdateInterval = 0.05
motionManager.showsDeviceMovementDisplay = true 
motionManager.startDeviceMotionUpdatesUsingReferenceFrame(CMAttitudeReferenceFrame.XArbitraryCorrectedZVertical, toQueue: NSOperationQueue.mainQueue(), withHandler:handleUpdate)
...
private func handleUpdate(data: CMDeviceMotion!, error: NSError!) {
    if data != nil {
        let field = data.magneticField.field
        println("\(field.x), \(field.y), \(field.z)")
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос