менеджер местоположений не в основной теме после segue? - PullRequest
0 голосов
/ 26 февраля 2019

У меня серьезная проблема с использованием управления местоположением и просмотром карты.

Я создаю простое приложение, показывающее местоположение, в котором я сейчас нахожусь, оно работает нормально, когда только один viewcontroller, но после того, как я добавил viewController и перешели после перехода первого viewController к сопоставлению viewController появляется сообщение об ошибке:

менеджер местоположения (0x101f3d870) создан в очереди отправки, выполняющейся в потоке, отличном от основного потока

после этого приложение вылетает с таким сообщением об ошибке:

MKMapView должен быть инициализирован в главном потоке

Но я действительно перемещаю код в основнойпоток, и это нормально, прежде чем я добавил первый viewcontroller и segue !!!Код ниже:

import UIKit
import MapKit
import CoreLocation

class Map_ViewController: UIViewController,MKMapViewDelegate,CLLocationManagerDelegate,UISearchBarDelegate {

    @IBOutlet weak var mapView: MKMapView!

    var cloaction = CLLocationManager()
    var span = MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)
    var currentLat : Double = 0
    var currentLon : Double = 0

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    override func viewWillAppear(_ animated: Bool) {
        // Start get the location on viewWillAppear
            DispatchQueue.main.async {
            self.mapView.delegate = self
            self.mapView.showsScale = true

            self.mapView.showsPointsOfInterest = true
            self.mapView.showsUserLocation = true

            self.cloaction.requestAlwaysAuthorization()
            self.cloaction.requestWhenInUseAuthorization()

            if CLLocationManager.locationServicesEnabled() {
                self.cloaction.delegate = self
                self.cloaction.desiredAccuracy = kCLLocationAccuracyBest
                self.cloaction.startUpdatingLocation()
            }

            setCenter()
        }
    }

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

        if let location = locations.last {
            mapView.region.center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude)
            mapView.setRegion(mapView.region, animated: false)
        }
    }

    func setCenter() {
        let center = CLLocationCoordinate2D(latitude: mapView.userLocation.coordinate.latitude, longitude: mapView.userLocation.coordinate.longitude)
        mapView.region.center = center
        mapView.region.span = span
        mapView.setRegion(mapView.region, animated: true)
    }

}

Переход в главном представлении контроллера:

override func viewDidLoad() {
    super.viewDidLoad()

    self.performSegue(withIdentifier: "goToMap", sender: nil)

}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    print("goToMapViewController")

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...