我所建立的:
我构建了一个简单的GMSMapView
CLLocationManagerDelegate
,只跟踪用户的当前位置并更新GMSMapView
。
问题:
当CLLocationManagerDelegate
(GMSMapView
屏幕)直接打开时,它可以正常工作,但当我尝试使用GMSMapView
到达segue
屏幕时,它会推动错误。
在主线程以外的线程上执行的调度队列上创建了位置管理器(0x145e5f9e0
)。开发人员有责任确保在分配了位置管理器对象的线程上运行运行循环。特别是,不支持在任意调度队列(未附加到主队列)中创建位置管理器,这将导致无法接收回调。
答案 0 :(得分:2)
使用 Swift 3 。所以问题在于变量GMSMapView
和CLLocationManager
的初始化。这就是它对我有用的方式:
我在ViewController
类中定义了变量,如下所示
private var locationManager: CLLocationManager!
private var googleMapView: GMSMapView!
在viewDidLoad()
我引入了一个DispatchQueue
来在主线程中运行它。
DispatchQueue.main.async {
//adding mapView
self.googleMapView = GMSMapView()
self.view.addSubview(self.googleMapView)
self.googleMapView.translatesAutoresizingMaskIntoConstraints = false
//auto layout constraints
self.googleMapView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 0).isActive = true
self.googleMapView.rightAnchor.constraint(equalTo: self.view.rightAnchor, constant: 0).isActive = true
self.googleMapView.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: 0).isActive = true
self.googleMapView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: 0).isActive = true
//location manager setup
self.locationManager = CLLocationManager()
self.locationManager.delegate = self
self.locationManager.startUpdatingHeading()
}
答案 1 :(得分:1)
使用此代码
DispatchQueue.main.async
{
/*your code here*/
};
答案 2 :(得分:0)
您必须将用于查找位置的代码放入调度队列而不是主队列。