我正在尝试修复用户当前位置,并在地图上显示一些数据。我的手表套件扩展名的代码如下。
import Foundation
import CoreLocation
class InterfaceController: WKInterfaceController, CLLocationManagerDelegate {
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()
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
dLog("Did get a location.")
}
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
dLog("Did fail to retrieve a location.")
}
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
print(status)
}
@IBAction func btnRequestLocation() {
let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
locationManager.requestLocation()
}
我还确保在WatchKit扩展目标链接框架和库下包含CoreLocation框架。但是,在手表模拟器和与iOS应用程序配对的真正Apple手表上运行此代码,这些委托回调永远不会被解雇。我不确定我是否错过了一个阻碍我获取位置的地方。我已经尝试重置位置和隐私,我甚至得到了我的应用程序需要位置权限的请求。我点击“允许”但没有任何位置被发送到Apple Watch扩展程序。任何帮助将不胜感激。
编辑:
我还为iOS 9采取了一些额外的步骤。
项目 - > iOS目标 - >背景模式 - 检查位置更新 - iOS Target还包含plist文件中的“Required Background Modes”键。
以下是iOS App的属性列表。
更新 似乎这可能是手表OS2中孤立的常见问题。 https://forums.developer.apple.com/thread/14828
答案 0 :(得分:0)
您正在请求requestAlwaysAuthorization
,因此您需要确保已启用地点背景模式并设置allowsBackgroundLocationUpdates=TRUE
(适用于iOS9)。
但是,我建议您申请requestWhenInUseAuthorization
,因为您只是要求通过requestLocation()
进行一次性的位置更新。