2011-02-02 12 views
10

आईओएस 4.0 करने से पहले, CoreLocation सही ढंग से ऊंचाई रिपोर्टिंग कर रहा था अब यह हमेशा 0 फुट के रूप में रिपोर्ट करता है।आईओएस CoreLocation ऊंचाई

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    NSString *tLatitude = [NSString stringWithFormat:@"%3.5f", newLocation.coordinate.latitude]; 
    NSString *tLongitude = [NSString stringWithFormat:@"%3.5f", newLocation.coordinate.longitude]; 
    /* the following returns 0 */ 
    NSString *tAltitude = [NSString stringWithFormat:@"%i", newLocation.altitude]; 

    /* theres more code, but it's not relevant, 
         and this worked prior to iOS 4.0*/ 
    [manager stopUpdatingLocation]; 
} 

डिवाइस है और न ही सिम्युलेटर पर काम कर रहा है, किसी और अनुभव इस मुद्दे करता है?

+0

क्या आप इसे किसी डिवाइस या सिम्युलेटर पर परीक्षण कर रहे हैं? –

+0

डिवाइस और सिम्युलेटर। – WrightsCS

उत्तर

11

यदि आप startMonitoringSignificantLocationChanges का उपयोग कर रहे हैं, जो आईओएस 4.0 के लिए एक नई सुविधा थी, तो आपको ऊंचाई अपडेट नहीं मिलेगा। यह लो-पावर मोड उपयोगकर्ता के स्थान को जानने के लिए केवल सेल टावर का उपयोग करता है, और यह विधि ऊंचाई की रिपोर्ट नहीं करती है।

अधिक आम तौर पर, आईफोन में आपके स्थान - सेल टावर्स, वाई-फाई और जीपीएस का पता लगाने के तीन तरीके हैं। जीपीएस का उपयोग होने पर आपको केवल ऊंचाई मिल जाएगी। इसलिए यदि आप अपने desiredAccuracy सेटिंग को जीपीएस का उपयोग करने के लिए डिवाइस को मजबूर करने के लिए वास्तव में सटीक होने के लिए सेट करते हैं, तो यदि कोई उपयोगकर्ता आईफोन के अंदर है तो संभवतः एक जीपीएस सिग्नल प्राप्त करने में सक्षम नहीं होगा और सेल या वाई-फाई पर फॉलबैक होगा। उस स्थिति में, आपको ऊंचाई नहीं मिलेगी। आईपॉड टच पर मौजूद उपयोगकर्ताओं पर भी विचार करें - इसमें केवल वाई-फाई के माध्यम से स्थान प्राप्त करने की क्षमता है, और इस प्रकार ऊंचाई की रिपोर्ट भी नहीं की जाएगी।

1

Core Location Data Types Reference से:

CLLocationDistance डेटा प्रकार (ऊंचाई के लिए डेटा प्रकार) एक double है। आपके stringWithFormat के लिए आप जिस फॉर्मेटर का उपयोग कर रहे हैं वह integer है। आपको अपनी ऊंचाई को integer पर पहले डालना होगा, या double (% f) फ़ॉर्मेटर का उपयोग करना होगा।

+0

मैं ऊंचाई को एक पूर्णांक में परिवर्तित कर रहा हूं। जैसा कि मैंने कहा, यह आईओएस 4.0 से पहले पूरी तरह से काम किया (यानी कोई कोड नहीं बदला)। – WrightsCS

+0

इसके अलावा, जिस तरह से मैंने इसे/सही/मुझे सही ऊंचाई दी है, उदाहरण के लिए 5280 फीट – WrightsCS

+0

@WrightsCS के लिए दिखाया गया है, क्या आपने यह देखने के लिए सुझाव दिया है कि इससे कोई फर्क पड़ता है या नहीं? – raidfive

1

दो चीजें जिन्हें आप आजमा सकते हैं। सबसे पहले, स्थान प्रबंधक के desiredAccuracy को kCLLocationAccuracyBest पर सेट करने का प्रयास करें।

यदि यह काम नहीं करता है, तो [manager stopUpdatingLocation]; को हटाने का प्रयास करें, और ऊंचाई के साथ didUpdateToLocation में NSLog डालें। कभी-कभी इसे ऊंचाई प्रदर्शित करने से पहले थोड़ा सा संकुचित करने की आवश्यकता होती है।

+0

kCLLocationAccuracyBest हमेशा सेट किया गया है, और stopUpdatingLocation को हटाने का कोई प्रभाव नहीं है। – WrightsCS

0

कोर स्थान हमेशा ऊंचाई की रिपोर्ट नहीं करता है। मैं आमतौर पर अपनी "सफलता" प्रतिनिधि विधि में शून्य ऊंचाई की जांच करता हूं। यदि ऊंचाई अभी भी 0 है, तो मैं जांच करता रहता हूं, अन्यथा, मैं कोरलोकेशन चालू करता हूं।

संबंधित मुद्दे