سؤال

أنا أكتب بعض التعليمات البرمجية للحصول على بعض القيم بما في ذلك الدورة التدريبية

    -(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 و 90 ، أو 90 و 180.

بسبب المنطق أو ، يبدو المنطق أيضًا معيبًا بعض الشيء بالنسبة لي أيضًا ، وربما يكون هناك شيء لا أفهمه بشأن الافتراضات التي قمت بها - ولكن إذا كانت القيمة ، على سبيل المثال ، 200 ، فستمر أولاً if لأن 200 أكبر من 0. سوف يمر بعد ذلك أيضًا if لأن 200 أكبر من 90. يمرون بسبب المنطق أو. واحد فقط من العبارات (> = 0 أو <90) يجب أن يكون صحيحًا حتى يمر.

سيتم حل هذا باستخدام المنطق وبدلاً من ذلك.

نصائح أخرى

لا تحتاج إلى الذهاب عبر NSString للتحقق من الدورة ، ولكن السبب الجذري لخطبك هو أن الدورة مزدوجة ، يجب استخدامك %f في تكوين السلسلة الخاصة بك.

أقصر :

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

ولكن في الواقع أعتقد أن Algo خاطئ. أنت ذاهب إلى الشمال إذا كانت الدورة 0 <= الدورة <45 أو 315 <= الدورة <360.

yonel

شكرًا ، الدورة التدريبية في الدرجة :-( لكنني لا أفهم algo ، أقرأ على Apple Doc ، لقد وجدت هذا:

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

هل نقول نفس الشيء؟ :د

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top