2015-02-01 4 views
0

저는 Apple Watch on 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

현재 사용자 위치를 사용하려면 다음 단계를 따라야합니다. - IOS 앱에서 라이브러리에 CoreLocation 프레임 워크를 추가합니다. - IOS 응용 프로그램의 파일 폴더와 info.plist 파일을 지원할 때, 이름이 두 행으로 추가되어야합니다 : NSLocationWhenInUseDescription 및 값을 설정할 수 있습니다 "당신의 위치를 ​​알아!" 및 다른 행 : NSLocationAlwaysUsageDescription 및 값을 설정할 수 있습니다 "항상 위치 사용!" - 이제 CoreLocation을 가져 와서 controller.swift를보고 CLLocationDelegate의 대리인을 추가하십시오.

이제 watchkit 확장에, 당신은 CoreLocation와 CLLocationManager 위임을 너무 가져와야합니다 및 awakeWithContext에서이 단계를 수행하십시오

// MARK: CLLocationManagerDelegate 

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

     println(locations) 
    } 

참고 실행 한 : 당신이 CLLocationManagerDelegate 쓰기 그 이후

//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() 

을 귀하의 IOS 응용 프로그램은 먼저 사용자의 위치를 ​​받아들이도록 동의하고, 그 후에는 현재 사용자 위치를 취하기위한 Watchkit 체계를 실행할 수 있습니다.

+0

"IOS 앱에서 라이브러리에 CoreLocation 프레임 워크 추가"- 죄송합니다. 정확히 어디에 추가해야합니까? 나는 4 info.plist) "CLLocationDelegate의 대리인을 추가하십시오"- "var delegate : CLLocationManagerDelegate?"와 같아야합니까? 좀 혼란 스럽네요. ( –

+0

이유는 모르지만 시뮬레이터에서 실행되지 않습니다. –

+0

Build Phases에서 CoreLocation.framework를 추가 할 수 있습니다. –