Отладка приложения на основе местоположения - PullRequest
0 голосов
/ 05 января 2012

Я пытаюсь создать приложение на основе определения местоположения, и я пытался отладить его в течение 3 дней, и до сих пор не могу понять, что не так ... В моем контроллере представления мне пропускают некоторые точки местоположения (широта).и долготы) методом делегата:

- (void)locationManager:(CLLocationManager *)manager    didUpdateToLocation:(CLLocation *)newLocation           fromLocation:(CLLocation *)oldLocation{
    currentPoint.lat=newLocation.coordinate.latitude*M_PI/180;
    currentPoint.longit=newLocation.coordinate.longitude*M_PI/180;
}

где currentPoint - это объект из созданного мною класса Pointxy, представляющий собой не что иное, как объект, имеющий два свойства lat и longit, оба с плавающей точкой.

Затем я создал еще один класс с именем Shape, который имеет NSMutableArray (ptArray) и свойство с именем area, представляющее собой длинный двойной тип.

Затем я сохраняю кучу заостренных объектов в ptArray, а затем преформ использую их вследующий метод Shape:

-(void)CalculateArea{
for (int i=0; i<[self NumberofPoints]-1; i++) {
    Pointxy *pointi=[ptArray objectAtIndex:i];
    Pointxy *pointiplus1=[ptArray objectAtIndex:i+1];
    area-=6371.0*6371.0/2.0*(pointiplus1.longit-pointi.longit)*(2+sinf(pointiplus1.lat)+sinf(pointi.lat));
}
Pointxy *pointzero=[ptArray objectAtIndex:0];
Pointxy *pointlast=[ptArray objectAtIndex:[ptArray count]-1];

area-=6371.0*6371.0/2.0*(pointzero.longit-pointlast.longit)*(2+sinf(pointzero.lat)+sinf(pointlast.lat));
area=area*1000000.0;
    }

Проблема, с которой я столкнулся, заключается в том, что я пытаюсь отобразить область в UILabel, используя этот код:

NSString *AreaString=[[NSString alloc]initWithFormat:@"%Lf",MyShape.area];
    [AreaLabel setText:AreaString];

, где MyShape является объектом Shape иAreaLabel - это UILabel, у меня всегда отображается 0,0000, и я не должен видеть, почему?Я думаю, это может быть вопрос точности с моими переменными, не так ли?Большое спасибо

1 Ответ

0 голосов
/ 08 января 2012

Я только что понял свою ошибку. Я звонил [ptArray addObject:currentPoint];, где currentPoint - это экземпляр pointxy.

Дело в том, что после этого я присваивал новое значение currentPoint.lat и longit, но поскольку метод addObject передает объект по ссылке, когда я изменял значения, значения также изменялись в объекте массива, а затем Я добавлял currentPoint в другой раз, но так как он передавался по ссылке, у меня теперь в массиве было множество равных точек, и область внутри фигуры внутри этих точек была действительно нулевой!

...