【发布时间】:2018-06-30 14:29:47
【问题描述】:
didUpdateLocations 未触发
- CLLocationManagerDelegate 以视图控制器作为委托正确实现
import Foundation
import UIKit
import CoreLocation
protocol LocationServiceDelegate {
func tracingLocation(currentLocation: CLLocation)
func tracingLocationDidFailWithError(error: NSError)
}
class LocationService: NSObject, CLLocationManagerDelegate {
static var sharedInstance = LocationService()
var locationManager: CLLocationManager?
var currentLocation: CLLocation?
var delegate: LocationServiceDelegate?
var paymentVC: PaymentViewController?
override init() {
super.init()
self.locationManager = CLLocationManager()
guard let locationManager = self.locationManager else {
return
}
if CLLocationManager.authorizationStatus() == .notDetermined {
locationManager.requestAlwaysAuthorization()
}
locationManager.distanceFilter = 200
}
func startUpdatingLocation() {
print("Starting Location Updates")
self.locationManager!.startUpdatingLocation()
}
func stopUpdatingLocation() {
print("Stop Location Updates")
self.locationManager?.stopUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location = locations.last else {
return
}
self.currentLocation = location
updateLocation(currentLocation: location)
}
private func locationManager(manager: CLLocationManager, didFailWithError error: Error) {
updateLocationDidFailWithError(error: error as NSError)
}
private func updateLocation(currentLocation: CLLocation){
guard let delegate = self.delegate else {
return
}
delegate.tracingLocation(currentLocation: currentLocation)
}
private func updateLocationDidFailWithError(error: NSError) {
guard let delegate = self.delegate else {
return
}
delegate.tracingLocationDidFailWithError(error: error)
}
}
- 这是视图控制器的扩展,我在其中实现自定义协议以进行核心定位跟踪
-
我在 viewDidLoad 中调用 startUpdatingLocations()
extension PaymentViewController: LocationServiceDelegate,CLLocationManagerDelegate { func tracingLocation(currentLocation: CLLocation) { locationService.currentLocation = currentLocation } func tracingLocationDidFailWithError(error: NSError) { print("Error message: \(error.localizedDescription)") } func startUpdatingLocations() { locationService.locationManager?.delegate = self locationService.delegate = self locationService.startUpdatingLocation() } func stopUpdatingLocations() { LocationService.sharedInstance.stopUpdatingLocation() } }
corelocation 跟踪未在模拟器中触发。但是这是启用的。
enter image description here 不幸的是,我现在无法使用设备进行测试
【问题讨论】:
-
模拟器不是您的真实设备,因此无法更新您的位置
标签: swift core-location