2015-03-16 3 views
2
import UIKit 
import CoreLocation 

class ViewController: UIViewController, CLLocationManagerDelegate { 

    @IBOutlet var latLabel: UILabel! 
    @IBOutlet var longLabel: UILabel! 

    @IBOutlet var courseLabel: UILabel! 
    @IBOutlet var speedLabel: UILabel! 
    @IBOutlet var altLabel: UILabel! 
    @IBOutlet var addressLabel: UILabel! 

    var manager:CLLocationManager! 
    var userLocation:CLLocation = CLLocation() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     manager = CLLocationManager() 
     manager.delegate = self 
     manager.desiredAccuracy = kCLLocationAccuracyBest 
     manager.requestWhenInUseAuthorization() 
     manager.distanceFilter = 50 
     manager.startUpdatingLocation() 


    } 

    func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 

     userLocation = locations[0] as CLLocation 
     println(userLocation.coordinate.latitude) 

     var latitude:CLLocationDegrees = userLocation.coordinate.latitude 
     latLabel.text = "\(latitude)" 
     var longitude:CLLocationDegrees = userLocation.coordinate.longitude 
     longLabel.text = "\(longitude)" 

     var course:CLLocationDirection = userLocation.course 
     courseLabel.text = "\(course)" 

     var speed:CLLocationSpeed = userLocation.speed 
     speedLabel.text = "\(speed)" 

     var altitude:CLLocationAccuracy = userLocation.altitude 
     altLabel.text = "\(altitude)" 


     CLGeocoder().reverseGeocodeLocation(userLocation, completionHandler: { (placemarks, error) -> Void in 

      if (error != nil) { 

       println(error) 

      } else { 
       if let p = CLPlacemark(placemark: placemarks?[0] as CLPlacemark) { 
        println(p) 
       } 
      } 

     }) 



     //println("Location = \(locations)") 
     println(locations) 
    } 


} 

Я постоянно получаю эту ошибку ошибки Домен = kCLErrorDomain Code = 2 «Операция не может быть завершена. (ошибка kCLErrorDomain 2.) ", когда я пытаюсь получить ближайший адрес пользователей. Я не уверен, в чем проблема, может ли кто-нибудь увидеть, что происходит? Благодарю.Error Domain = kCLErrorDomain Code = 2 "Операция не может быть завершена. (KCLErrorDomain ошибка 2.)"

+2

[KCLError 2] (https://developer.apple.com/library/ prerelease/ios/documentation/CoreLocation/Reference/CoreLocationConstantsRef/index.html # // apple_ref/c/econst/kCLErrorNetwork) является 'kCLErrorNetwork', описанным как« Сеть была недоступна или произошла сетевая ошибка ». Может быть, глупо, но проверили ли вы свое сетевое соединение? –

ответ

6

Это сетевая ошибка, CLGeocoder нуждается в рабочем сетевом соединении, чтобы изменить геокодирование местоположения в соответствии с the docs.

Кроме того, CLGeocoder будет обрабатывать запросы геокодирования, возвращая ту же ошибку, если вы превысите скорость запроса, это также описано в ссылке на класс.

+1

Для полноты «Максимальная скорость», упомянутая в документах, не указана. В то время как Apple предлагает 1 геокодирование в минуту за приложение, мне удалось сделать несколько 100 геокодировок один за другим ... – Sasho

+0

@Sasho: конечно, но 100 не гарантируется. Если на сервере слишком много запросов, он будет игнорировать ваши ответы. Я видел это более одного раза, когда злоупотреблял службой. – brainray

0

В качестве альтернативы, вы можете пройти Lat долго к этому google api и получить все поля, относящиеся к адресу в зависимости от «типов» в формате JSON

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