2015-03-30 5 views
1

Ребята, у меня такая же проблема с названием этого вопроса. это сообщение, когда пользователь не разрешает доступ к локализации. Это мой код:Операция не может быть завершена. (ошибка kCLErrorDomain 1.)

@IBAction func getLocation(sender: UIButton) 
{ 

    // i servizi di localizzazione sono abilitati? 
    if (CLLocationManager.locationServicesEnabled()) 
    { 
     // abbiamo l'autorizzazione ad accedere ai servizi di localizzazione? 
     switch CLLocationManager.authorizationStatus(){ 
     case .Denied: 
      // NO 
      displayAlertWithTitle("Denied", message: "Location services are not allowed for this app") 
     case .NotDetermined: 
      // NON SAPPIAMO, DOBBIAMO CHIEDERE 
      self.locationManager = CLLocationManager() 
      if (locationManager != nil) 
      { 
       locationManager.delegate = self 
       locationManager.desiredAccuracy = kCLLocationAccuracyBest 
       locationManager.requestWhenInUseAuthorization() 
       locationManager.startUpdatingLocation() 
      } 
     case .Restricted: 
      // SONO STATE APPLICATE DELLE RESTRIZIONI, NON ABBIAMO ACCESSO AI SERVIZI DI LOCALIZZAZIONE 
      displayAlertWithTitle("Restricted", message: "Location services are not allowed for this app") 
     default: 
      println("Authorized/or non Determined") 
      self.locationManager = CLLocationManager() 
      if (locationManager != nil) 
      { 
       locationManager.delegate = self 
       locationManager.desiredAccuracy = kCLLocationAccuracyBest 
       locationManager.requestWhenInUseAuthorization() 
       locationManager.startUpdatingLocation() 
      } 
     } 
    } 
    // i servizi di localizzazione non sono abilitati -- proponi all'utente di abilitarli... 
    else 
    { 
     println("Location services are not enabled") 
    } 
} 

// funzione del CoreLocation richiamata dalla funzione getLocation sovrastante che setta la visuale in base alla localizzaizone dell'utente 
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 

    self.mapView.showsUserLocation = true 
    self.locationManager.stopUpdatingLocation() 

    // aggiorno le coordinate dell'utente 
    self.posizioneUtente = manager.location.coordinate 
    println("Posizione utente aggiornata (lat: \(posizioneUtente.latitude) long: \(posizioneUtente.longitude))") 

    // setto la camera sulla posizione dell'utente 
    var camera = MKMapCamera(lookingAtCenterCoordinate: posizioneUtente, fromEyeCoordinate: posizioneUtente, eyeAltitude: 500) 
    // utilizzo un'animazione più lenta 
    UIView.animateWithDuration(1.8, animations:{ 
     self.mapView.camera = camera 
    }) 

} 

// funzione del CoreLocation 
func locationManager(manager: CLLocationManager!, didFailWithError error: NSError!) { 
    println("Error: \(error.localizedDescription)") 
} 

// funzione del CoreLocation 
func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) { 
    print("The authorization status of location " + "services is changed to: ") 

    switch CLLocationManager.authorizationStatus(){ 
    case .Denied: 
     println("Denied") 
    case .NotDetermined: 
     println("Not determined") 
    case .Restricted: 
     println("Restricted") 
    default: 
     println("Authorized") 
    } 
} 

// funzione che mostra a schermo un'alert 
func displayAlertWithTitle(title: String, message: String) 
{ 
    let controller = UIAlertController(title: title, message: message, preferredStyle: .Alert) 
    controller.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil)) 
    presentViewController(controller, animated: true, completion: nil) 
} 

Где моя ошибка? Пожалуйста, помогите мне :)

+0

«Эта ошибка возникает, если у вас есть схема Scheme/Edit Scheme/Options/Allow Location Simulation, но у меня нет установленного по умолчанию местоположения. Я уверен, что есть и другие причины». Пожалуйста, взгляните на эту тему, которую я нашел, поскольку это может быть полезно http://stackoverflow.com/q/1409141/4056108 – chirag90

+0

Я прочитал вопрос, с которым вы связаны .... Ошибка должна быть нормальной, поскольку пользователь не разрешает доступ к местоположению .... не так ли? –

+0

Извините за мой английский ... –

ответ

2

kCLErrorDomain Код 1 возникает, когда пользователь запретил вашему приложению доступ к службам определения местоположения.

От CLError.h:

kCLErrorDenied, // Access to location or ranging has been denied by the user 

Вы должны предложить пользователю предоставить приложению доступ вручную, посетив Настройки> Конфиденциальность> Службы геолокации> Ваше приложение.

+0

Этот тип ошибки также встречается на OSX. В этом случае перейдите в Системные настройки >> Безопасность и конфиденциальность >> Конфиденциальность и включите «Включить службы определения местоположения». Затем запустите приложение, и OSX попросит разрешения или включит его напрямую, если он уже отображается в списке ниже этого флажка. Протестировано на Эль Капитан, 10.11.5. –

Смежные вопросы