2014-07-20 8 views
49

मैंने अपना ऐपप्रोजेक्ट आईओएस 8 तैयार करने की कोशिश की। मैंआईओएस 8 अनुरोध WhenInUseAuthorization कोई पॉपअप

[_locationManager requestWhenInUseAuthorization]; 

बारे में बहुत कुछ और plist में प्रवेश

NSLocationWhenInUseUsageDescription 

तो मैं सभी आवश्यक कोड लाइनों बदल पढ़ा था।

यह ठीक काम करता है, लेकिन अब मैंने अपनी परियोजना को फिर से अपने आईओएस 7 बेस से नई सुविधाओं को शामिल करने के लिए कॉपी किया है। लेकिन जब मैं आईओएस 8 स्थान गोपनीयता के लिए परिवर्तन करता हूं तो पॉपअप अब और प्रकट नहीं होता है।

मेरा कोड तब तक काम करता है जब तक मैंने कॉपी नहीं किया।

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
    <dict> 
     <key>NSLocationWhenInUseUsageDescription</key> 
     <string>tolle sache </string> 
     <key>CFBundleDevelopmentRegion</key> 
     <string>en</string> 
     <key>CFBundleExecutable</key> 
     <string>${EXECUTABLE_NAME}</string> 
     <key>CFBundleIdentifier</key> 
     <string>fapporite.${PRODUCT_NAME:rfc1034identifier}</string> 
     <key>CFBundleInfoDictionaryVersion</key> 
     <string>6.0</string> 
     <key>CFBundlePackageType</key> 
     <string>BNDL</string> 
     <key>CFBundleShortVersionString</key> 
     <string>1.0</string> 
     <key>CFBundleSignature</key> 
     <string>????</string> 
     <key>CFBundleVersion</key> 
     <string>1</string> 
    </dict> 
</plist> 

और यहाँ मेरे कॉल है

- (instancetype)initWithCoder:(NSCoder *)coder 
{ 
    self = [super initWithCoder:coder]; 
    if (self) { 

     _UserLocation = [[CLLocation alloc]init]; 
     _locationManager = [[CLLocationManager alloc]init]; // initializing locationManager 
     _locationManager.delegate = self; 
     _locationManager.desiredAccuracy = kCLLocationAccuracyBest; // setting the accuracy 
     [_locationManager requestWhenInUseAuthorization]; // iOS 8 MUST 
     [_locationManager startUpdatingLocation]; //requesting location updates 

     NSLog(@"passed initwithcode"); 

    } 
    return self; 
} 

मैं इसे कैसे ठीक कर सकते हैं?

उत्तर

18

Info.plist

+32

यह मेरे लिए मुख्य समस्या थी। विवरण जोड़ने के बाद, संवाद पॉप अप रखा और फिर तुरंत गायब हो गया। फिक्स्डिंग जिसमें दो बदलावों की आवश्यकता होती है: दृश्य में अनुरोध करने का अनुरोध करें WillAppear: या बाद में, और अपने CLLocationManager के संदर्भ को संग्रहीत करना सुनिश्चित करें। यदि आप नहीं करते हैं तो इसे हटा दिया जाएगा और संवाद गायब हो जाएगा। – robotspacer

+1

इसे देखने में भी जोड़ सकते हैंडलोड :, लेकिन CLLocationManager का संदर्भ रखने के लिए यह महत्वपूर्ण है। – OutOnAWeekend

+0

तो (केवल पूर्णता के लिए), संदर्भ रखने के लिए, मैंने एक मजबूत संशोधक के साथ एक संपत्ति का उपयोग किया: '@property (मजबूत, nonatomic) CLLocation प्रबंधक * स्थान प्रबंधक;' –

101

में एक NSLocationWhenInUseUsageDescription लिखने की कोशिश प्रलेखन

NSLocationWhenInUseUsageDescription (स्ट्रिंग - आईओएस) से कारण है कि एप्लिकेशन को उपयोगकर्ता के स्थान तक पहुंचता है सामान्य रूप से, जबकि अग्रभूमि में चल वर्णन करता है। इस ऐप को शामिल करें जब आपका ऐप उपयोगकर्ता के वर्तमान स्थान को सीधे ट्रैक करने के लिए स्थान सेवाओं का उपयोग करता है। यह कुंजी महत्वपूर्ण स्थान परिवर्तन सेवा का उपयोग कर उपयोगकर्ता के स्थान की निगरानी करने के लिए या क्षेत्र की निगरानी के लिए स्थान सेवाओं का उपयोग करने का समर्थन नहीं करती है। सिस्टम में स्थान सेवाओं का उपयोग करने की अनुमति का अनुरोध करते समय उपयोगकर्ता को पर प्रदर्शित अलर्ट पैनल में इस कुंजी का मान शामिल है।

स्थान सेवाओं के लिए प्राधिकरण का अनुरोध करने के लिए CLLocationManager क्लास के अनुरोध WENInUseAuthorization विधि का उपयोग करते समय यह कुंजी आवश्यक है। यदि कुंजी अनुरोध को कॉल नहीं करती है तो कुंजी मौजूद नहीं है, इस कुंजी को शामिल किए बिना WENInUseAuthorization विधि, सिस्टम आपके अनुरोध को अनदेखा करता है।

यह कुंजी आईओएस 8.0 और बाद में समर्थित है। यदि आपकी Info.plist फ़ाइल में यह कुंजी और NSLocationUsageDescription कुंजी दोनों शामिल हैं, सिस्टम इस कुंजी का उपयोग करता है और NSLocationUsageDescription कुंजी को अनदेखा करता है।

इसके बारे में here पढ़ें।

मुझे लगता है कि यह जानकारी आपकी जानकारी में जोड़ने का सबसे आसान तरीका है। कृपया आपको सही जानकारी पर क्लिक करना है।plist और

ओपन जैसे-> स्रोत कोड

चुनते हैं और फिर आप के बीच में एक पाठ जोड़ सकते हैं चाहते हैं इससे पहले कि</dict></plist>

<key>NSLocationWhenInUseUsageDescription</key> 
<string></string> 

अंत में निम्नलिखित जोड़ें <string></string> जो उपयोगकर्ता को बताता है कि आप उसका स्थान क्यों उपयोग करना चाहते हैं। यह पाठ अलर्ट में डिफ़ॉल्ट पाठ के नीचे दिखाई देगा।

+0

आईओएस 8 के लिए बिल्कुल सही समाधान! – coolcool1994

+0

Info.plist की कुंजी जोड़ना चाल था, धन्यवाद! – Kennysmoothx

+1

@ ग्रोट सर मैं अभी भी सक्षम स्थान –

10

iOS 8.3, Xcode 6.3.1, एआरसी सक्षम

सवाल हल किया गया है, लेकिन मैं है (2) CLLocationManager साथ मेरी हाल ही में भागीदारी से जोड़ने के लिए कहते हैं।

1) आप निम्न कुंजी अपने * .plist फ़ाइल में प्रवेश होना चाहिए:

enter image description here

सबसे अधिक इस्तेमाल किया कुंजी जैसे सामान्य और वर्णनात्मक नाम हो "गोपनीयता - स्थान प्रयोग विवरण" है, जो वास्तव में "NSLocationUsageDescription" कुंजी है।

देखने के लिए "कच्चे" कुंजी नाम को नेविगेटर क्षेत्र में "* -Info.plist" और राइट क्लिक जहां कुंजी सूचीबद्ध हैं, नीचे देखें जाना:

enter image description here

और तुम मिल निम्न परिणाम:

enter image description here

कि इस लेख से संबंधित हैं तीन चाबियाँ हैं:

enter image description here

2) सुनिश्चित करें कि आप प्राधिकरण या अद्यतन स्थान का अनुरोध करने से पहले CLLocationManager के कार्यान्वयन को आवंटित और प्रारंभ करें।

* ज फ़ाइल:

@interface SomeController : UIViewController <CLLocationManagerDelegate> 

@property (strong, nonatomic) CLLocationManager *locationManager; 

* .m फ़ाइल:

- (IBAction)locationButton:(UIButton *)sender 
{ 
    if (self.locationManager == nil) 
    { 
     self.locationManager = [[CLLocationManager alloc] init]; 
     self.locationManager.delegate = self; 
    } 
    else 
    { 
     nil; 
    } 

    if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) 
    { 
     [self.locationManager requestWhenInUseAuthorization]; 
    } 
    else 
    { 
     nil; 
    } 

    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    [self.locationManager startUpdatingLocation]; 
} 

आशा इस कोई समय बचाता है! धन्यवाद।

+0

कृपया खाली छोड़ दें ... अन्य कथन, यह मेरी प्रोग्रामिंग शैली है, चाहे वह सही या गलत हो, यह मेरे दिमाग में चीजों को व्यवस्थित रखने में मदद करता है। धन्यवाद। –

1

एक ही समस्या का कारण था क्योंकि मैं एक विधि के अंदर स्थानीय var में CLLocationManager को तुरंत चालू कर रहा था, जिससे इसे CLLocationManager एक वर्ग संपत्ति बना दिया गया।
थोड़ी देर के बाद मैं यहाँ समाधान नहीं मिला, लेकिन जब से यह गूगल में पहला परिणाम है मैं इसे यहाँ जा रहा हूँ, आशा है कि मैं तुम्हें कुछ समय बचाने:

requestWhenInUseAuthorization() not Work in iOS 8 With NSLocationWhenInUseUsageDescription Key in Info.plist

0

एप्पल घड़ी से संबंधित:

आपको वॉचकिट ऐप के आईफोन के Info.plist में requestWhenInUseAuthorization कुंजी डालना होगा।

इसने मुझे दो बार काट दिया है।

3

यहां थोड़ा गचाचा है। सुनिश्चित करें कि आप मुख्य बंडल प्लेस्ट में NSLocationAlwaysUsageDescription या NSLocationWhenInUseUsageDescription कुंजी जोड़ रहे हैं और आपके परीक्षण लक्ष्य plists में से कोई भी नहीं!