我正在编写一些代码来获取一些值,包括课程
-(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”。
哪里是我的错?
感谢的!
答案 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