2010-04-12 7 views
0

J'écris un code pour obtenir des valeurs, y compris bien sûrvaleur de cours comparant l'iPhone problème pour cllocation

-(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 [email protected] "N";} 
    if ((myInt >= 90) || (myint < 180)) {course.text [email protected] "E";} 

et ainsi de suite, mais je récupérer toujours la première valeur, « N ».

où est mon erreur?

Merci!

Répondre

3

Vous pouvez modifier la logique OU à logique et (changement ||-&&) qui veillera à ce que la valeur est comprise entre 0 et 90, ou 90 et 180.

En raison de la logique OU, la logique aussi semble un peu imparfait à moi aussi, peut-être il y a quelque chose que je ne comprends pas sur les hypothèses que vous avez faites - mais si la valeur est, disons, 200, il passera le premier if parce que 200 est supérieur à 0. Il Passera ensuite le second if car 200 est supérieur à 90. Ils passent à cause du OU logique. Une seule des instructions (> = 0 OU < 90) doit être vraie pour que cela réussisse.

Cela serait résolu en utilisant AND logique à la place.

+0

de jasarien de remerciement, shure, j'ai compris cette erreur – zebra

1

Vous n'avez pas besoin d'aller via NSString pour vérifier le cours, mais la cause première de votre bug est que le cours est un double, vous devez utiliser %f dans la formation de votre chaîne.

plus courte:

 
double theCourse = newLocation.course; 
if ((theCourse >= 0) || (theCourse < 90)) {course.text [email protected] "N";} 
if ((theCourse >= 90) || (theCourse < 180)) {course.text [email protected] "E";} 

Mais en fait je pense que votre algo est faux. Vous allez vers le nord si le cours est 0 < = cours < 45 ou 315 < = cours < 360.

+0

salut, j'ai essayé sur votre chemin et d'une autre manière: NSString * courseString = [[NSString alloc] initWithFormat: @ "% 3.0f", newLocation.course]; course.text = courseString; En simulateur j'ai essayé d'assigner une valeur à courseString et fonctionne. Sur mon appareil, une fois l'application de valeur se bloque et je n'ai que le rapport de panne de mobile (et je ne vois rien usefoul). Des idées? C'est arrivé chaque fois que je fais ça avec un double. – zebra

+0

si vous voulez 3 chiffres après le point dans votre chaîne, c'est "% .3f" – yonel

0

@yonel

merci de, est bien sûr degré :-( mais je l'ai pas comprendre votre algo, la lecture sur doc apple j'ai trouvé ceci:

Thus, north is 0 degrees, east is 90degrees, south is180 
degrees, and so on. Course values may not be available on all 
devices. 

pour moi cela veut dire

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; - 

Sommes-nous dire la même chose: D