在模拟器中启用了CoreLocation

时间:2018-06-30 14:29:47

标签: swift core-location

didUpdateLocations没有触发 -CLLocationManagerDelegate是使用viewcontroller作为委托正确实现的

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)
    }
}
  • 这是viewcontroller的扩展,我在其中实现了用于自定义协议的核心定位跟踪
  • 我在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 不幸的是,我现在无法用设备进行测试

1 个答案:

答案 0 :(得分:1)

我知道在模拟器上模拟核心位置跟踪的唯一方法是选择模拟器的“调试”选项卡中可用的位置选项之一。

enter image description here