google for current api_key_for_ios swift google-maps xcode9-beta

swift - for - ios google map marker



Comprobador de subprocesos principales: API de IU llamada en un subproceso en segundo plano:- (6)

Consulte este enlace https://developer.apple.com/documentation/code_diagnostics/main_thread_checker

Para mí esto funcionó cuando llamé desde el bloque.

Estoy usando google maps en Xcode 9 beta, iOS 11.

Recibo un error en el registro de la siguiente manera:

Comprobador de subprocesos principal: API de IU llamada en un subproceso de fondo: - [UIApplication applicationState] PID: 4442, TID: 837820, Nombre del subproceso: com.google.Maps.LabelingBehavior, Nombre de la cola: com.apple.root.default-qos.overcommit QoS: 21

¿Por qué ocurriría esto? Estoy casi seguro de que no estoy alterando ningún elemento de la interfaz del hilo principal de mi código.

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)") } }



Elija esquema -> Diagnóstico, elimine el verificador de subprocesos principales, luego desaparecerá la advertencia. editor de esquemas


Envuelva las líneas de código que modifican la IU en DispatchQueue.main.async {} para asegurarse de que se ejecutan en el hilo principal. De lo contrario, puede llamarlos desde un subproceso en segundo plano, donde no se permiten modificaciones de la interfaz de usuario. Todas esas líneas de código deben ejecutarse desde el hilo principal.


Es difícil encontrar el código de la interfaz de usuario que a veces no se ejecuta en el hilo principal. Puedes usar el siguiente truco para localizarlo y arreglarlo.

  1. Elija Editar esquema -> Diagnóstico, marque Comprobador de subprocesos principales y Pausa en los problemas.
  2. Ejecute su aplicación iOS para reproducir este problema. (Xcode debería detenerse en el primer problema).

  3. Envuelva el código que modifica la IU en DispatchQueue.main.async {}


Primero, asegúrese de que sus invocaciones de google maps y cambios en la interfaz de usuario se invoquen desde el hilo principal usando:

DispatchQueue.main.async { //Do UI Code here. //Call Google maps methods. }

Además, actualice su versión actual de google maps. Google Maps tuvo que hacer un par de actualizaciones para el verificador de hilos.

Para la pregunta: "¿Por qué ocurriría esto?" Creo que Apple agregó una afirmación para un caso extremo para el que Google tuvo que actualizar su pod.