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!

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top