2010-04-12 2 views
0

я пишу код для получения некоторых значений, включая, конечноiPhone Проблема сравнение значения курса для 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";} 

и так далее, но я всегда получить первое значение «N».

где моя ошибка?

Thank's!

ответ

3

Вы можете изменить логическое ИЛИ для логического и (изменение || к &&), который будет гарантировать, что значение находится в пределах от 0 до 90, или 90 и 180.

Из логического ИЛИ, логика также кажется немного ошибочным для меня тоже, возможно, есть что-то, что я не понимаю о сделанных вами предположениях, - но если значение, скажем, 200, оно пройдет первый if, потому что 200 больше 0. Это Затем также передается второй if, потому что 200 больше 90. Они проходят из-за логического ИЛИ. Только одно из утверждений (> = 0 ИЛИ < 90) должно быть истинным для его прохождения.

Это будет решено путем использования логического И вместо этого.

+0

jasarien Thank, в shure, я понял эту ошибку – zebra

1

Вам не нужно проходить через NSString, чтобы проверить курс, но основной причиной вашей ошибки является то, что курс является двойным, вы должны использовать %f в формировании вашей строки.

короче:

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

Но на самом деле я думаю, что ваш алго неправильно. Вы идете на север, если курс 0 < = курс < 45 или 315 < = курс < 360.

+0

привет, я попробовал на вашем пути и по-другому: NSString * courseString = [[NSString alloc] initWithFormat: @ "% 3.0f", newLocation.course]; course.text = courseString; В симуляторе я пытаюсь присвоить значение courseString и работает. На моем устройстве после того, как вы получите сообщение об ошибке «Значение», и у меня есть только отчет о сбое в работе (и я ничего не вижу usefoul). Любые идеи? Это случается каждый раз, когда я делаю это с двойным. – zebra

+0

, если вы хотите 3 цифры после точки в строке, это «% .3f» – yonel

0

@yonel

Thank, в курс по степени :-( , но я не понимаю ваш алго, чтение на яблоко документ я нашел это:

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

для меня это значит

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

мы говорим то же самое: D

Смежные вопросы