Reg locationmanager:didUpdateLocation

时间:2014-01-26 18:43:01

标签: objective-c xcode4

嗨!! 我是Objective-C的新手。 我正在开发一个跟踪器应用程序,我必须存储所有gps坐标,然后分析它们以跟踪车辆的路径。我使用两个数组来存储纬度和经度点。当试图稍后使用Latitude点进行计算时,它给我一个错误,说“索引1处的超出异常”,但是数组的大小显示为4.这是我的ViewController的代码片段。 h,请看一下,让我知道我是怎么做的。

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    [trackingMapView addPoint:newLocation];
    float time = -[startDate timeIntervalSinceNow];
    displayLabel.text = [NSString stringWithFormat:@"Speed: %.02f mph", distance * 2.2369 / time];
    // if there was a previous location
    if (oldLocation != nil)
    {
        // add distance from the old location tp the total distance
        distance += [newLocation getDistanceFrom:oldLocation];
    }
    // create a region centered around the new point
    MKCoordinateSpan span = MKCoordinateSpanMake(0.005, 0.005);

    // create a new MKCoordinateRegion centered around the new location
    MKCoordinateRegion region = MKCoordinateRegionMake(newLocation.coordinate, span);

    //New Added Code
    CLLocationSpeed speed = newLocation.speed ;
    speed = speed * 2.2369 ;
   /* if (speed > 10.000)
        {
            NSString *message = @"Slow Down !!" ;
            UIAlertView *alertforspeed = [[UIAlertView alloc] initWithTitle:@"Speed Monitor" message: message delegate:self cancelButtonTitle:@"Return" otherButtonTitles:nil];
            [alertforspeed show];
            [alertforspeed release];
        }*/
     //NEW CODE 2
     //----------------------------------------------
    arraywithlat= [[NSMutableArray alloc]init];
    arraywithlong= [[NSMutableArray alloc]init];
    NSNumber *lati = [NSNumber numberWithFloat:newLocation.coordinate.latitude];
    NSNumber *longi = [NSNumber numberWithFloat:newLocation.coordinate.longitude];
    [arraywithlat addObject:lati];
    [arraywithlong addObject:longi];
    //[locations addObject:newLocation];
    NSLog(@"Array with lat : %@" , arraywithlat);
    NSLog(@"Array with long: %@", arraywithlong);
        //-----------------------------------------------
     int i;
     float r1 = 0.0, r2, result ;
     NSLog(@"IN LANE TRACKING, BEFORE IFF");
     int exsize = sizeof(arraywithlat);
     NSLog(@"SIze of array before the loop: %d", exsize);
     if (sizeof(arraywithlat) >= 4) {
     NSLog(@"CROSSED THE IFFFFF");
     NSLog(@"SIXE OF ARRAYWITHLAT: %lu" , sizeof(arraywithlat));
     for (i = 0; i <= sizeof(arraywithlat); i++) {
     NSNumber *tla1 = [arraywithlat objectAtIndex:i];
     float temp1 = [tla1 floatValue];
     NSLog(@"temp111111111: %f",temp1);
     NSNumber *tla2 = [arraywithlat objectAtIndex:i+1] ;
     float temp2 = [tla2 floatValue];
     float r1 = temp1 - temp2 ;
     // float r1 = [NSNumber numberWithFloat:tla2] - [NSNumber numberWithFloat:tla1];
     //float r1 = [tla2 floatValue] - [tla1 floatValue];
     r1 = r1 * r1 ;
     //float tla = arraywithlat objectAtIndex: i+1) - (arraywithlat objectAtIndex: i);
     //float tlo = [arraywithlong obj]
     // float tr1 = powf(((arraywithlat objectAtIndex:(i+1))-([arraywithlat objectatIndex:(i)])), <#float#>)
     }
     }
     NSLog(@"r1 after cal: %f",r1);

    // reposition the map t show the new point
    [mapView setRegion:region animated:YES];

}

1 个答案:

答案 0 :(得分:0)

我认为你的问题在这里:

for (i = 0; i <= sizeof(arraywithlat); i++) {
     NSNumber *tla1 = [arraywithlat objectAtIndex:i];
     float temp1 = [tla1 floatValue];
     NSLog(@"temp111111111: %f",temp1);
     NSNumber *tla2 = [arraywithlat objectAtIndex:i+1] ;
     float temp2 = [tla2 floatValue];
     float r1 = temp1 - temp2 ;
     // float r1 = [NSNumber numberWithFloat:tla2] - [NSNumber numberWithFloat:tla1];
     //float r1 = [tla2 floatValue] - [tla1 floatValue];
     r1 = r1 * r1 ;
     //float tla = arraywithlat objectAtIndex: i+1) - (arraywithlat objectAtIndex: i);
     //float tlo = [arraywithlong obj]
     // float tr1 = powf(((arraywithlat objectAtIndex:(i+1))-([arraywithlat objectatIndex:(i)])), <#float#>)
}

数组中的第一个索引从0开始到n-1,因此i <= sizeof(arraywithlat)错误,i < sizeof(arraywithlat)应该是错误的。 而NSNumber *tla2 = [arraywithlat objectAtIndex:i+1]是错误的。改变它,因为当我将等于n-1然后你得到异常超出界限。你能解释这个循环是什么,可能我们会帮你重写它

另请注意,委托- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation方法已弃用。请改用locationManager:didUpdateLocations: