2012-03-29 11 views
7

मैं MKMapView i.e setShowsUserLocation से YES की संपत्ति सेट करके उपयोगकर्ता के वर्तमान स्थान को दिखाने का प्रयास कर रहा हूं। डिफ़ॉल्ट रूप से जब एप्लिकेशन उपयोगकर्ता स्थान को अपडेट करना प्रारंभ करता है तो आईफोन स्क्रीन के ऊपरी बाईं ओर एक तीर दिखाई देता है। लेकिन वर्तमान स्थान दिखाने के बाद तीर गायब हो जाना चाहिए, लेकिन जब तक ऐप चल रहा है तब तक यह अभी भी मौजूद है जिसका अर्थ यह होगा कि ऐप अभी भी है पृष्ठभूमि में स्थान अद्यतन कर रहे हैं? तो मैं वर्तमान स्थान को अपडेट करना बंद कैसे कर सकता हूं? मैं प्रतिनिधि जो तुरंत बुलाया जाता है ..MKMapView के साथ वर्तमान उपयोगकर्ता स्थान दिखाएं?

उत्तर

15

यदि नक्शा दृश्यमान है और दिखा रहा है UUerLocation YES पर सेट है, तो यह पृष्ठभूमि में अद्यतन जारी है।

दृश्य गायब होने पर या जब पृष्ठभूमि पृष्ठभूमि में जाता है तो आपको इसे अनसेट करने की आवश्यकता होती है। सबसे अच्छा तरीका शायद आपके दृश्य नियंत्रक को UIApplicationDidEnterBackgroundNotification और UIApplicationDidBecomeActiveNotification के लिए अधिसूचित करने के लिए पंजीकृत करना होगा। एक ब्रेकपाइंट सेट करके

- (void)appToBackground{ 
    [mapview setShowsUserLocation:NO]; 
} 

और

- (void)appReturnsActive{ 
    [mapview setShowsUserLocation:YES]; 
} 

चेक कि इन तरीकों वास्तव में कहा जाता है:

- (void)viewDidLoad{ 
    [super viewDidLoad]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appToBackground) name:UIApplicationDidEnterBackgroundNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appReturnsActive) name:UIApplicationDidBecomeActiveNotification object:nil]; 
} 

तो विधि इस अधिसूचना से बुलाया में, मानचित्र दृश्य गुण userLocation के बारे में बदलने के वहां और होम स्क्रीन पर लौट रहा है।

+2

मैं इस विधि का उपयोग कर रहा हूं, लेकिन मुझे क्या मिल रहा है पृष्ठभूमि में प्रवेश करते समय रेस हालत दुर्घटना प्रतीत होता है: '[एमकेमैपव्यू (यूजरपोशनिंग) स्टॉपअपडेटिंग यूज़र लोकेशन]' कॉल '[एमकेमैप व्यू (यूजरपोशनिंग इंटीरियर) हटाएं यूज़र लोशन]' जो एसआईजीएसईजीवी के साथ उड़ाता है। मान लीजिए कि आपने इसे पहले से देखा/हल किया है? –

+0

को 'viewDidUnload' जब पर्यवेक्षक को हटाने की आवश्यकता है? – Raptor

+1

@ माइकलकेर्नहैन मुझे एक ही समस्या मिल रही है। क्या तुम्हें कभी कोई हल मिला? – horsejockey

0

आप स्थान के प्रबंधक [self.locationManager stopUpdatingLocation];

अपने मामले का सवाल है के लिए एक संदेश भेजने के द्वारा स्थान का अद्यतन रोक सकते हैं लागू कर दिया है, तो आप उन स्थान को दिखाने से रोकने की कोशिश की थी?

+0

मैं किसी भी स्थान प्रबंधक का उपयोग नहीं कर रहा हूं .. अगर मैं इसे रोकता हूं, तो यह एनोटेशन (स्थान) को भी छुपाता है – hemant

+0

'CLLocationManagerDelegate' को लागू करने का प्रयास करें, आपके पास कोरलोकेशन फ्रेमवर्क को नियंत्रित करने का एक बेहतर तरीका होगा। आप यहां एक अच्छा प्रारंभिक ट्यूटोरियल पा सकते हैं: http://www.switchonthecode.com/tutorials/getting-your-location-in-an-iphone- appplication –

1

मैं माइकल कर्नाहन से सहमत हूं, मुझे यकीन है कि MKMapView के अंदर दौड़ की स्थिति है।

MKMapViewuserLocationAnnotation (नीला बिंदु) को हटाने की कोशिश करता है जैसे ही यह पता चलता है कि यह स्थान सेवाओं तक पहुंच खो गया है।

हालांकि

, है कि संरक्षित लगता है और अगर डेवलपर भी एक [mapView setShowsUserLocation:NO] जारी करता है, यह धागा कि बुला रहा है बहुत MKMapView के आंतरिक धागा userLocationAnnotation हटाने की कोशिश कर के बीच दौड़ की वजह से एक दुर्घटना प्राप्त होने की संभावना है, और नहीं setShowsUserLocation:NO

+0

सहमत हुए। यह विशेष रूप से आईओएस 7.x में एक मुद्दा प्रतीत होता है। मुझे नहीं लगता कि मैंने इसे अभी तक 8.x पर देखा है। – Kevin

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