2012-05-24 9 views
5

वर्तमान में, एक ऐप विकसित करना जिसे CLLocationManager (बिना किसी नियमित ट्रैकिंग के) से अंतिम स्थान प्राप्त करने की आवश्यकता है। इससे कोई फर्क नहीं पड़ता कि यह कितना पुराना है, सटीक है। मुझे जरूरत नहीं है और ट्रैकिंग शुरू करना चाहते हैं - मुझे सिर्फ कैश से कुछ अंतिम स्थान लेना होगा और यही वह है। आईएमएचओ, CLLocationManager आईओएस में एक साझा घटक है और यदि कुछ ऐप स्थान ट्रैकिंग का उपयोग करता है तो एक और ऐप CLLocationManager.location से सबसे हालिया स्थान का उपयोग करने में सक्षम होना चाहिए। यह CLLocationManager आवंटित/init करने के लिए पर्याप्त होना चाहिए और इसके स्थान को पकड़ो। हालांकि यह नहीं है। मैंने आईफोन 4 पर परीक्षण किया है - Google मानचित्र शुरू किया है, मेरा वर्तमान स्थान देखा है, फिर मेरे ऐप पर गया, लेकिन [[CLLocationManager alloc] init] के बाद स्थान संपत्ति शून्य है।CLLocationManager से किसी भी अंतिम ज्ञात स्थान प्राप्त करने के लिए कोई ऐप स्थान ट्रैकिंग शुरू करना चाहिए?

अपडेट: कोशिश की गई [locationManager startUpdatingLocation]; और [locationManager stopUpdatingLocation]; लेकिन परिणाम वही है। मुझे लगता है, एकमात्र समाधान नियमित ट्रैकिंग शुरू करना है?

UPDATE2: अजीब लेकिन CLLocationManager के आवंटन/इनिट के बाद "ऐप स्थान सेवाओं का उपयोग करना चाहता है" के साथ कोई अलर्ट नहीं है। यहाँ मेरी कोड टुकड़ा है:

CLLocationManager *locationManager = [[CLLocationManager alloc] init]; 

[locationManager startUpdatingLocation]; 
[locationManager stopUpdatingLocation]; 
NSLog(@"%@", locationManager.location); //prints nil 
+0

मैं सुझाव है कि आप इस पर गौर [कैसे CoreLocation साथ अपना वर्तमान स्थान प्राप्त करने के लिए] (http://stackoverflow.com/questions/6516967/how-to-find- आपके-वर्तमान-स्थान-कोरलोकेशन के साथ), और 'NSArray' में पाए गए स्थान को संग्रहीत करें। –

उत्तर

2

सबसे पहले आप अगर अपने locationManager एक है की जाँच करनी चाहिए, चलो कहते हैं, 'स्थिर' स्थान पूर्व बचाया करते हैं।

यदि ऐसा होता है, तो आप कर चुके हैं।

यदि नहीं, तो आपको startUpdatingLocation और फिर didUpdateToLocation:fromLocation: कॉलबैक, stopUpdatingLocation में स्थान प्राप्त करने के बाद, stopUpdatingLocation में होना चाहिए।

मेरा अनुभव कहता है कि केवल एक स्थान प्राप्त करने का सबसे अच्छा तरीका है। लेखक अद्यतन मैच के लिए

अद्यतन:

आप stopUpdatingLocation सिर्फ startUpdatingLocation के बाद नहीं करना चाहिए। startUpdatingLocation पृष्ठभूमि में एक सेवा शुरू करता है, इसलिए आपको एक स्थान प्राप्त होने तक प्रतीक्षा करनी चाहिए, इसलिए कॉलबैक विधियों में इसे घुमाएं।

+0

आपका मतलब 'स्थैतिक' स्थान क्या है? अगर मैं Google मानचित्र पर जाता हूं और अपना वर्तमान स्थान देखने में सक्षम हूं तो उसे स्थिर स्थान माना जाना चाहिए? Google नक्शे निश्चित रूप से स्थान सेवाओं का उपयोग करता है, इसलिए उसके बाद CLLocationManager में कम-से-कम एक स्थिर स्थान होना चाहिए। – Centurion

+0

मेरा मतलब है एक ऐसा स्थान जो आपके ऐप द्वारा 'didUpdateToLocation: स्थान से: 'कॉलबैक के माध्यम से नहीं मिला था। और हां, Google मानचित्र स्थान सेवाओं का उपयोग करता है, लेकिन इसकी गारंटी नहीं है कि आपका ऐप किसी अन्य ऐप द्वारा प्राप्त स्थान प्राप्त कर सकता है। – sonxurxo

+1

वैसे, मुझे 99% यकीन है कि जब आप ** स्थान प्रबंधक का उपयोग कर ** प्रारंभ करते हैं तो अलर्ट दिखाई देना चाहिए, जब आप आवंटित नहीं करते हैं और इसे init करते हैं। – sonxurxo

1

CLLocationManager का कोई भी उपयोग करने के लिए आपको कहीं भी CLLocationManagerDelegate लागू करने की आवश्यकता है।

-[CLLocationManager startUpdatingLocation] एक एसिंक प्रक्रिया शुरू करता है। यदि आप इसे एक ही रनलोप चक्र में रोकते हैं तो प्रक्रिया कभी शुरू नहीं होती है और यही कारण है कि आप अनुमति संवाद कभी नहीं देखते हैं।

वह कुछ इस तरह चला जाता है:

@interface MyClass : NSObject <CLLocationManagerDelegate> { 
    CLLocationManager *manager; 
    CLLocation *lastLocation; 
} 

@end 

@implementation 

- (id)init { 
    self = [super init]; 
    if (self) { 
     manager = [[CLLocationManager alloc] init]; 
     manager.delegate = self; 
     [manager startUpdatingLocation]; 
    } 
    return self; 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation; 
{ 
    lastLocation = newLocation; 
    [manager stopUpdatingLocation]; 
} 

// in your real implementation be sure to handle the error cases as well. 
@end 
संबंधित मुद्दे