我正在Xcode 9 beta,iOS 11中使用Google Maps。
我收到如下错误输出到日志:
主线程检查器:在后台线程上调用的UI API:-[UIApplication applicationState] PID:4442,TID:837820,线程名称:com.google.Maps.LabelingBehavior,队列名称:com.apple.root.default- qos.overcommit ,QoS:21
为什么会发生这种情况,因为几乎可以肯定我没有在代码中更改主线程中的任何接口元素。
override func viewDidLoad() { let locationManager = CLLocationManager() locationManager.requestAlwaysAuthorization() locationManager.requestWhenInUseAuthorization() if CLLocationManager.locationServicesEnabled() { locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters locationManager.startUpdatingLocation() } viewMap.delegate = self let camera = GMSCameraPosition.camera(withLatitude: 53.7931183329367, longitude: -1.53649874031544, zoom: 17.0) viewMap.animate(to: camera) } func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let locValue:CLLocationCoordinate2D = manager.location!.coordinate print("locations = \(locValue.latitude) \(locValue.longitude)") } func mapView(_ mapView: GMSMapView, willMove gesture: Bool) { } func mapView(_ mapView: GMSMapView, idleAt position: GMSCameraPosition) { if(moving > 1){ moving = 1 UIView.animate(withDuration: 0.5, delay: 0, animations: { self.topBarConstraint.constant = self.topBarConstraint.constant + (self.topBar.bounds.height / 2) self.bottomHalfConstraint.constant = self.bottomHalfConstraint.constant + (self.topBar.bounds.height / 2) self.view.layoutIfNeeded() }, completion: nil) } moving = 1 } // Camera change Position this methods will call every time func mapView(_ mapView: GMSMapView, didChange position: GMSCameraPosition) { moving = moving + 1 if(moving == 2){ UIView.animate(withDuration: 0.5, delay: 0, animations: { self.topBarConstraint.constant = self.topBarConstraint.constant - (self.topBar.bounds.height / 2) self.bottomHalfConstraint.constant = self.bottomHalfConstraint.constant - (self.topBar.bounds.height / 2) self.view.layoutIfNeeded() }, completion: nil) } DispatchQueue.main.async { print("Moving: \(moving) Latitude: \(self.viewMap.camera.target.latitude)") print("Moving: \(moving) Longitude: \(self.viewMap.camera.target.longitude)") } }
首先,请确保从主线程中调用了Google地图和ui更改。
您可以启用Thread Sanitizer 查找有问题的行。
您可以使用以下命令在主线程上添加冒犯的行:
DispatchQueue.main.async { //Do UI Code here. //Call Google maps methods. }
另外,更新您当前版本的Google地图。Google地图必须对线程检查器进行一些更新。
问题是:“为什么会这样?” 我认为苹果为一个边缘案例添加了一个断言,然后谷歌不得不为其更新pod。