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)")
}
}
Creo que la solución ya está dada, porque mi problema es el teclado en camino.
UIKeyboardTaskQueue solo se puede llamar desde el hilo principal
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.
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.