Ios 加速度计计算结果导致inf

Ios 加速度计计算结果导致inf,ios,objective-c,accelerometer,Ios,Objective C,Accelerometer,我一直试图用加速计移动UIImageView,但遇到了一个问题。当我尝试平滑数据并计算出数据从原始位置的加速度时,值返回无穷大。我真的不确定我做错了什么 这是我的密码: - (void)viewDidLoad { gameObjects = [NSMutableArray arrayWithObjects: nil]; UIImageView* mainChar = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 50,

我一直试图用加速计移动UIImageView,但遇到了一个问题。当我尝试平滑数据并计算出数据从原始位置的加速度时,值返回无穷大。我真的不确定我做错了什么

这是我的密码:

- (void)viewDidLoad {
    gameObjects = [NSMutableArray arrayWithObjects: nil];

    UIImageView* mainChar = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
    [mainChar setCenter:CGPointMake(screenHeight/2, screenWidth/2)];
    mainChar.image = [UIImage imageNamed:@"dot.png"];
    [self.view insertSubview:mainChar atIndex:2];
    [gameObjects addObject:mainChar];
    mainChar = nil;

    AvData = [NSMutableArray arrayWithObjects: nil];

    motionManager = [[CMMotionManager alloc] init];
    motionManager.deviceMotionUpdateInterval = 20;

    [motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue] withHandler:^(CMAccelerometerData* accelerationData, NSError* error) {
    if (defaultData == nil) {defaultData = accelerationData;}
    [self accelerometerUpdate:accelerationData];
}];
}

-(void) accelerometerUpdate:(CMAccelerometerData*)aData {

    //Accelerometer Smoothing
    [AvData addObject:aData];
    if ([AvData count] >= 20) {[AvData removeObjectAtIndex:0];}
    float avX = 0;
    float avY = 0;
    float avZ = 0;
    for (int i = 0; i < [AvData count]; i++) {
        avX = avX + [[AvData objectAtIndex:i] acceleration].x;
        avY = avY + [[AvData objectAtIndex:i] acceleration].y;
        avZ = avZ + [[AvData objectAtIndex:i] acceleration].z;
    }

    avX = avX/([AvData count] - 1);
    avY = avY/([AvData count] - 1);
    avZ = avZ/([AvData count] - 1);

    //Calculate the delta from original device acceleration value
    float accX = defaultData.acceleration.x - avX;
    float accY = defaultData.acceleration.y - avY;
    //float accZ = defaultData.acceleration.z - avZ;

    NSLog([NSString stringWithFormat:@"%f", accY]);

    UIImageView* mainChar = [gameObjects objectAtIndex:0];

    [mainChar setCenter:CGPointMake(mainChar.center.x + accX, mainChar.center.y + accY)]; 
    //accX and accY are infinity for some reason, and so the image disappears!

    mainChar = nil;
}

奇怪的是,当我登录accY时,它返回一个正确的值。我做错了什么?

在我的脑海里:

当您到达以下行时:

avX=avX/[AvData count]-1; avY=avY/[AvData count]-1; avZ=avZ/[AvData count]-1


如果此时count==1,代码将被零除。我预计会崩溃,但如果不是,结果将是无穷大或NAN。我期望NAN,但如果它不抛出异常,它可能会返回INF。我需要对它进行测试或查找以确定。

啊,好的,谢谢!现在工作很好。在我的脑海里,计数最后包括零!对addObject:的调用中的nil只是一个参数结束标记,用于接受可变数量参数的方法。这是对C语言的varargs机制的保留。我更喜欢新的对象文本语法:NSArray*anArray=@[@1、@2、@3];