Ios6 如何初始化CMCalibratedMagneticField属性,使其不返回零?

Ios6 如何初始化CMCalibratedMagneticField属性,使其不返回零?,ios6,calibration,magnetometer,Ios6,Calibration,Magnetometer,这个问题以前有人问过 但它并没有得到真正的回答。我对这件事很迷茫 我用的是一个简单的公式,但field.field.x,y,z总是零 if (motionManager.deviceMotionAvailable) { [motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:

这个问题以前有人问过 但它并没有得到真正的回答。我对这件事很迷茫

我用的是一个简单的公式,但field.field.x,y,z总是零

if (motionManager.deviceMotionAvailable)
{
    [motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue]  
                                       withHandler:
       ^(CMDeviceMotion *motionData, NSError *error) {
           CMCalibratedMagneticField field = motionData.magneticField;
           NSLog(@"x: %f  y:%f  z:%f", field.field.x
                                     , field.field.y
                                     , field.field.z);

    }];       
}
样本输出为

2013-07-14 22:18:27.865 TestApp[6678:907] x: 0.000000  y:0.000000  z:0.000000

2013-07-14 22:18:27.869 TestApp[6678:907] x: 0.000000  y:0.000000  z:0.000000

2013-07-14 22:18:27.879 TestApp[6678:907] x: 0.000000  y:0.000000  z:0.000000
我很确定问题不在于手机,正如前面的回答所暗示的:我正在为一款相当现代的4S车编码。我已经准备好了CoreMotion、CoreLocation和CoreData框架——也许有一个我不知道的头文件需要在实现中导入?目前我似乎只需要

#import <tgmath.h>
#导入
但这是其他的东西

任何帮助都将不胜感激

蒂姆·雷德菲尔德

试试这个:

- (void)startDeviceMotionUpdatesUsingReferenceFrame:(CMAttitudeReferenceFrame)referenceFrame 
                                            toQueue:(NSOperationQueue *)queue 
                                        withHandler:(CMDeviceMotionHandler)handler
与以下任何一项有关:

     CMAttitudeReferenceFrameXArbitraryCorrectedZVertical  
     CMAttitudeReferenceFrameXMagneticNorthZVertical  
     CMAttitudeReferenceFrameXTrueNorthZVertical  
但不是:

     CMAttitudeReferenceFrameXArbitraryZVertical
(你错过的另一个问题是:)


如果您想了解太多有关磁强计数据的信息,请参阅我对这个问题的回答:

oops--这是非常重要的,谢谢!这很有效。我看过你的另一篇帖子(内容非常广泛,信息非常丰富!),但无法提取这种语法。