0

我正在编写一些代码来获取一些值,包括课程

    -(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";}

依此类推,但我总是检索第一个值“N”。

我的错在哪里?

谢谢!

4

3 回答 3

3

您可能希望将逻辑 OR 更改为逻辑和(更改||&&),这将确保该值介于 0 和 90 或 90 和 180 之间。

由于逻辑或,逻辑对我来说似乎也有点缺陷,也许我对你所做的假设有些不理解 - 但如果值为 200,它将通过第一个if,因为200 大于 0。它也会通过第二个if,因为 200 大于 90。它们通过是因为逻辑 OR。只有其中一个语句 (>= 0 OR < 90) 必须为真才能通过。

这将通过使用逻辑 AND 来解决。

于 2010-04-12T14:54:59.767 回答
1

您不需要通过 NSString 来检查课程,但您的错误的根本原因是课程是双重的,您应该%f在字符串的格式中使用。

更短:

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

但实际上我认为你的算法是错误的。如果课程为 0<=course<45 或 315<=course<360 ,您将前往北方。

于 2010-04-12T14:59:02.530 回答
0

@yonel

谢谢,当然是学位:-(但我不明白你的算法,阅读苹果文档我发现了这个:

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

于 2010-04-12T15:44:43.920 回答