【问题标题】:CoreLocation enabled in simulator在模拟器中启用 CoreLocation
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    相关资源
    最近更新 更多