iPhone问题比较cllocation的课程值

时间:2010-04-12 13:19:58

标签: iphone compare int cllocationmanager

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

    -(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”。

哪里是我的错?

感谢的!

3 个答案:

答案 0 :(得分:3)

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

由于逻辑OR,逻辑对我来说似乎也有点瑕疵,也许有些东西我不了解你所做的假设 - 但如果价值是200,它会通过第一个if因为200大于0.它还会传递第二个if,因为200大于90.它们因逻辑OR而通过。只有一个语句(&gt; = 0 OR&lt; 90)必须为true才能通过。

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

答案 1 :(得分:1)

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

更短:

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

但实际上我认为你的算法是错误的。如果课程为0&lt; = course&lt; 45或315&lt; = course&lt; 360。

,你将去北方。

答案 2 :(得分: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