Google Maps iOS + Storyboard + Segue = Crash
-
21-12-2019 - |
Pergunta
O que faço no meu aplicativo é o seguinte:
Eu carrego alguns dados nos dados principais e, quando terminar, o aplicativo precisa seguir para a próxima visualização (google map)
[self performSegueWithIdentifier:@"loadMap" sender:self];
mas eu recebo esse erro
Terminating app due to uncaught exception 'GMSThreadException', reason: 'All calls to the Google Maps SDK for iOS must be made from the UI thread'
Se eu fizer tudo isso, mas seguir com o toque em um botão, tudo funcionará bem.
O controlador de visualização de mapa do Google no storyboard possui uma saída de visualização GMSMapView com código de inicialização
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:45.331875
longitude:14.450455
zoom:14];
self.mapView.camera = camera;
GMSMarker *marker = [[GMSMarker alloc] init];
marker.position = camera.target;
marker.title = @"Test title";
marker.snippet = @"Lorem ipsum...";
marker.map = self.mapView;
Alguém pode me ajudar aqui?Como posso carregar o controlador de visualização com o Google Maps programaticamente usando o storyboard?
Solução
A exceção parece indicar que você está tentando executar uma sequência no thread em segundo plano.Para impedir que ele trave, você precisa usar o thread principal.Embrulhe seu performSegueWithIdentifier:sender:
da seguinte maneira para usar o thread principal:
dispatch_async(dispatch_get_main_queue(), ^{
[self performSegueWithIdentifier:@"loadMap" sender:self];
});
Outras dicas
Para rápido:
dispatch_async(dispatch_get_main_queue(), {})
Jogue o código nesses cachos ...