Problema do iPhone comparando o valor do curso para cllocation
-
26-09-2019 - |
Pergunta
Estou escrevendo algum código para obter alguns valores, incluindo o curso
-(void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
//somecode
NSString *dirString = [[NSString alloc] initWithFormat:@"%d", newLocation.course];
int myInt = [dirString intValue];
if ((myInt >= 0) || (myint < 90)) {course.text =@ "N";}
if ((myInt >= 90) || (myint < 180)) {course.text =@ "E";}
E assim por diante, mas eu sempre recupero o primeiro valor, "n".
Onde está meu erro?
Obrigado!
Solução
Você pode querer mudar o lógico ou para o lógico e (mude ||
para &&
) que garantirão que o valor esteja entre 0 e 90, ou 90 e 180.
Por causa da lógica ou, a lógica também me parece um pouco falha para mim, talvez haja algo que eu não estou entendendo sobre as suposições que você fez - mas se o valor for, digamos, 200, ele passará o primeiro if
porque 200 é maior que 0. ele também passará o segundo if
porque 200 é maior que 90. Eles passam por causa do lógico ou. Apenas uma das declarações (> = 0 ou <90) deve ser verdadeira para que ela passasse.
Isso seria resolvido usando lógico e, em vez disso,.
Outras dicas
Você não precisa passar por NSString para verificar o curso, mas a causa raiz do seu bug é que o curso é duplo, você deve usar %f
na formação da sua string.
mais curta :
double theCourse = newLocation.course;
if ((theCourse >= 0) || (theCourse < 90)) {course.text =@ "N";}
if ((theCourse >= 90) || (theCourse < 180)) {course.text =@ "E";}
Mas na verdade eu acho que seu algo está errado. Você está indo para o norte se o curso for 0 <= curso <45 ou 315 <= curso <360.
@yonel
Obrigado, curso está em diploma :-( Mas não entendi seu Algo, lendo no Apple Doc, encontrei o seguinte:
Thus, north is 0 degrees, east is 90degrees, south is180
degrees, and so on. Course values may not be available on all
devices.
Para mim isso significa
course between 0 and 44= North;
course between 45 and 89= NE;
course between 90 and 134= East;
course between 135 and 179= SouthEast;
course between 180 and 234= South;
course between 235 and 269= SouthWest;
course between 270 and 314= West;
course between 315 and 360 = NorthWest; -
Estamos dizendo a mesma coisa? : D