2015-02-01 2 views
0

Я пишу приложение для Apple Watch на Swift. И моя цель - создать своего рода навигатор, который может показать вам длину между вашей текущей позицией и точкой на карте. На данный момент я пытаюсь получить текущую позицию и отобразить ее на экране, но, к сожалению, код не работает.WatchKit и Geolocation

Здесь код интерфейса InterfaceController.swift.

class InterfaceController: WKInterfaceController, CLLocationManagerDelegate { 

    @IBOutlet weak var lblLocationDisplay: WKInterfaceLabel!; 

    let locationManager = CLLocationManager(); 

    override func awakeWithContext(context: AnyObject?) { 
     super.awakeWithContext(context) 

     // Configure interface objects here. 
    } 

    override func willActivate() { 
     // This method is called when watch view controller is about to be visible to user 
     super.willActivate() 
    } 

    override func didDeactivate() { 
     // This method is called when watch view controller is no longer visible 
     super.didDeactivate() 
    } 
    @IBAction func btnFindLocation() { 
     locationManager.delegate = self; 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
     locationManager.requestWhenInUseAuthorization(); 
     locationManager.startUpdatingLocation(); 

    } 

    func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 
     CLGeocoder().reverseGeocodeLocation(manager.location, completionHandler: {(placemarks, error) -> Void in 
      println("Something"); 
       let placeMarks = placemarks[0] as CLPlacemark; 
       self.displayLocation(placeMarks); 

     }); 
    } 

    func displayLocation(placemark: CLPlacemark) { 
//  locationManager.stopUpdatingLocation(); 
     println(placemark.country); 
     let locality = placemark.locality; 
     let postalCode = placemark.postalCode; 
     let administrativeArea = placemark.administrativeArea; 
     let country = placemark.country; 

     lblLocationDisplay.setText("Locality: \(locality) PostalCode: \(postalCode) Area: \(administrativeArea) Country: \(country)"); 
    } 
} 

Вот project

Пожалуйста, поделитесь своими предложениями о причине, почему код не работает. И также я хочу, чтобы вы посоветовали мне, как реализовать приложение навигатора в часах. Спасибо!

ответ

0

Чтобы принять текущее местоположение пользователя, вы должны следовать следующему шагу: - Добавить среду CoreLocation в библиотеки из приложения IOS. - В поддерживающей папке файла приложения IOS и файле info.plist вы должны добавить две строки с именем: NSLocationWhenInUseDescription и значение, которое вы можете установить «Чтобы узнать вашу локацию !!» и еще одна строка: NSLocationAlwaysUsageDescription и значение, которое вы можете установить «Всегда используя место!». - Теперь импортируйте CoreLocation для просмотра controller.swift и добавьте делегат CLLocationDelegate.

Теперь в расширении watchkit, вы должны импортировать CoreLocation и CLLocationManager делегатом слишком и следовать этот шаг в awakeWithContext:

//Make a new locationManager variable: 

var locationManager = CLLocationManager() 
     //  set delegate 
     locationManager.delegate = self 
     //  Set desiredAccuracy using a GPS of IP: 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest 

     //  request to use location 

     locationManager.requestAlwaysAuthorization() 
     //  start update location 
     locationManager.startUpdatingLocation() 

после того, что вы пишете CLLocationManagerDelegate:

// MARK: CLLocationManagerDelegate 

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

     println(locations) 
    } 

Обратите внимание, что вы запустите ваше приложение IOS, чтобы принять местоположение пользователя, после чего вы можете запустить схему Watchkit, чтобы принять текущее местоположение пользователя.

+0

«Добавить среду CoreLocation в библиотеки из приложения IOS» - Извините, но где именно я должен добавить это? У меня есть 4 info.plist) "и добавить делегата CLLocationDelegate" - должно ли оно быть таким "var delegate: CLLocationManagerDelegate?"? Я немного запутался ( –

+0

Я не знаю, почему, но приложение не работает на симуляторе. –

+0

вы можете добавить CoreLocation.framework в Build Phases. –

0

Необходимо использовать запрос всегда для доступа вместо запроса при использовании. См. Это сообщение How to calculate current location in WatchKit extension для получения дополнительной информации о использовании CLLocationManger в расширении WatchKit.