2010-08-04 7 views
8

मेरे पास सेटिंग्स पैनल में मेरे एप्लिकेशन के लिए स्थान सेवाएं अक्षम हैं। मैं मेरे विचार नियंत्रक में viewDidLoad में एक परीक्षण चलाने को देखने के लिए अगर वे सक्षम हैं:स्थान सेवाएं सक्षम परीक्षण जब वे दृश्य में अक्षम होते हैं तो पास हो जाता है DidLoad

if([CLLocationManager locationServicesEnabled]) { 
    //Do something now 
} 

यह परीक्षण हमेशा किसी कारण से गुजरता है। यदि मैं स्थान सेवाओं को आजमाता हूं और एक्सेस करता हूं तो मुझे स्थान प्रबंधक के लिए kCLErrorDenied त्रुटि मिलती है। क्या देता है?

क्या मैं गलत परीक्षण का उपयोग कर रहा हूं?

उत्तर

25

स्थान सेवाएं सक्षम कक्षा विधि केवल स्थान सेवाओं के लिए वैश्विक सेटिंग का परीक्षण करती है। AFAIK, यह जांचने का कोई तरीका नहीं है कि आपके ऐप को स्पष्ट रूप से अस्वीकार कर दिया गया है या नहीं। आपको स्थान अनुरोध विफल होने की प्रतीक्षा करनी होगी और CLLocationManagerDelegate विधि स्थान प्रबंधक का उपयोग करें: didFailWithError: जो भी आपको चाहिए, करने के लिए। उदा .:

- (void)locationManager: (CLLocationManager *)manager 
     didFailWithError: (NSError *)error { 

    NSString *errorString; 
    [manager stopUpdatingLocation]; 
    NSLog(@"Error: %@",[error localizedDescription]); 
    switch([error code]) { 
     case kCLErrorDenied: 
      //Access denied by user 
      errorString = @"Access to Location Services denied by user"; 
      //Do something... 
      break; 
     case kCLErrorLocationUnknown: 
      //Probably temporary... 
      errorString = @"Location data unavailable"; 
      //Do something else... 
      break; 
     default: 
      errorString = @"An unknown error has occurred"; 
      break; 
     } 
    } 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:errorString delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil]; 
    [alert show]; 
    [alert release]; 
} 

अधिक विकल्पों के लिए CLLocationManager class reference में CLError स्थिरांक पर दस्तावेज़ देखें।

+0

यह समझ में आता है कि यह हमेशा सच क्यों होता है। धन्यवाद! – Adam

+0

@ दान, यदि स्थान सेवाएं गलत है, तो मैंने लंबे समय तक इंतजार किया है, लेकिन प्रतिनिधि (स्थान प्रबंधक: didFailWithError :) विधि नहीं कहा जाता है। क्या कारण है?? – Apple

20

आईओएस 4.2 अब यह निर्धारित करने की अनुमति देता है कि CLLocationManager +authorizationStatus विधि के माध्यम से स्थान सेवाओं को अस्वीकार कर दिया गया है या नहीं।

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