Mapkit的位置授权不断抛出此错误:(0x14)“无法插入COPY_SEND”

时间:2017-12-10 22:13:11

标签: swift xcode

Xcode 9.1 Swift 4

这是我在控制台中遇到的错误: [Common] _BSMachError:端口6507; (os / kern)无效功能(0x14)“无法插入COPY_SEND”

我正在尝试让我的地图在模拟器中显示用户位置(自定义位置)并居中并缩放该位置。我已经实施了

隐私 - 位置始终和何时使用用法说明

隐私 - 使用时的位置用法说明

隐私 - 位置始终使用说明

在info.plist中所有字符串值。

以下是我的MapVC viewcontroller中的代码:

import UIKit
import MapKit
import CoreLocation

class MapVC: UIViewController {


    @IBOutlet weak var mapView: MKMapView!

    var locationManager = CLLocationManager()
    let authorizationStatus = CLLocationManager.authorizationStatus()
    let regionRadius: Double = 1000

    override func viewDidLoad() {
        super.viewDidLoad()
        mapView.delegate = self
        locationManager.delegate = self

        configureLocationServices()
        mapView.showsUserLocation = true


    }


}

extension MapVC: MKMapViewDelegate {
    func centerMapOnUserLocation() {
        guard let coordinate = locationManager.location?.coordinate else { return }
        let coordinateRegion = MKCoordinateRegionMakeWithDistance(coordinate, regionRadius * 2.0, regionRadius * 2.0)
        mapView.setRegion(coordinateRegion, animated: true)
    }

}

extension MapVC: CLLocationManagerDelegate {
    func configureLocationServices() {
        if authorizationStatus == .notDetermined {
            locationManager.requestAlwaysAuthorization()
        } else {
            return
        }


        }

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
        centerMapOnUserLocation()


    }
}

运行应用程序时,会出现“访问位置”弹出窗口,我选择“始终允许”或“仅在使用应用程序时”。弹出窗口消失,一旦检查模拟器的隐私设置,它就反映了我的选择。但之后没有任何事情发生。我怀疑守卫让坐标没有返回任何坐标所以它的“其他{返回}正在被调用并停在那里?现在这里是有趣的部分。如果我进入设置/隐私并选择其他允许选项可用,当我回到应用程序,它完全按照我的意愿执行centerMapOnUserLocation。

我已经尝试了大多数可以在SO以及其他网站上找到的适用建议。似乎没什么用。我尝试从头开始重建应用程序3次,所有结果都相同。我刚刚更新到Xcode 9.2同样的问题。任何帮助将不胜感激。提前致谢!!所需的任何其他信息只是让我知道,我会发布它。

1 个答案:

答案 0 :(得分:0)

我在 Xcode 9.1 Swift 4

中的完整答案

首先在ViewController上添加MapView,然后连接代理&检查故事板中的用户位置 选中标记,并将MapView插座添加到ViewController.swift文件中。使用名为 getCurrentLocationAction()的actionMethod添加一个Button,以获取ViewController.swift文件中的当前位置。更新您的ViewController.swift文件,如下所示。

另外,请不要忘记在info.plist文件中添加两个重要的密钥。

1.Privacy - 位置始终用法说明。
2.隐私 - 使用时的位置用法说明

import UIKit
import MapKit

class ViewController: UIViewController, MKMapViewDelegate {

    @IBOutlet weak var mapView: MKMapView!

    fileprivate var annotation: MKAnnotation!
    fileprivate var locationManager: CLLocationManager!
    fileprivate var isCurrentLocation: Bool = false

    override func viewDidLoad() {
        super.viewDidLoad()

        mapView.delegate = self
        mapView.mapType = .standard

    }

    @IBAction func getCurrentLocationAction(_ sender: Any) {
        if (CLLocationManager.locationServicesEnabled()) {
            if locationManager == nil {
                locationManager = CLLocationManager()
            }
            locationManager.requestWhenInUseAuthorization()
            locationManager.delegate = self
            locationManager.desiredAccuracy = kCLLocationAccuracyBest
            locationManager.requestAlwaysAuthorization()
            locationManager.startUpdatingLocation()
        }
    }

}

现在创建一个扩展并添加CLLocationManagerDelegate方法。

extension ViewController : CLLocationManagerDelegate{

    // MARK: - CLLocationManagerDelegate

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

        let location = locations.last
        let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude)
        let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01))

        self.mapView.setRegion(region, animated: true)

        if self.mapView.annotations.count != 0 {
            annotation = self.mapView.annotations[0]
            self.mapView.removeAnnotation(annotation)
        }

        let pointAnnotation = MKPointAnnotation()
        pointAnnotation.coordinate = location!.coordinate
        pointAnnotation.title = ""
        mapView.addAnnotation(pointAnnotation)
    }

}

希望这会有所帮助。快乐编码:)