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 を論理 and (に変更) に変更||する&&と、値が 0 から 90、または 90 から 180 の間にあることが保証されます。

論理 OR のため、論理にも少し欠陥があるように思われます。おそらく、あなたが行った仮定について理解していないことがありますが、値がたとえば 200 の場合、最初に合格するifため、 200 は 0 よりも大きいですif。200 は 90 よりも大きいため、2 番目も通過します。論理 OR のために通過します。合格するには、ステートメント (>= 0 OR < 90) の 1 つだけが true である必要があります。

これは、代わりに論理 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

@ヨネル

ありがとう、コースは学位です:-(しかし、私はあなたのアルゴを理解していません。アップルのドキュメントを読んで、これを見つけました:

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 に答える