2013-11-16 2 views
1

Что мне делать в моем приложении следующее:Google Maps IOS + Раскадровка + Segue = Краш

я загрузить некоторые данные в основных данных и когда это закончится приложение должно непосредственно перейти к следующему представлению (Google Map)

[self performSegueWithIdentifier:@"loadMap" sender:self];

, но я получаю эту ошибку

Terminating app due to uncaught exception 'GMSThreadException', reason: 'All calls to the Google Maps SDK for iOS must be made from the UI thread'

Если я все это, но сделать SEGUE при нажатии на кнопку все работает отлично.

Google контроллер посмотреть на карту в раскадровке имеет один выход вида GMSMapView с кодом инициализации

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; 

Может кто-нибудь помочь мне здесь? Как я могу загрузить контроллер просмотра с помощью Google Maps программно с помощью раскадровки?

ответ

10

Исключение указывает на то, что вы пытаетесь выполнить segue в фоновом потоке. Чтобы остановить его от сбоя, вместо этого вам нужно использовать основной поток. Оберните performSegueWithIdentifier:sender: следующим образом использовать основной поток:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self performSegueWithIdentifier:@"loadMap" sender:self]; 
}); 
+0

я пропустил очевидное. Задача решена. Спасибо. – defou

3

Для Swift:

dispatch_async(dispatch_get_main_queue(), {}) 

Перемешайте код в этих фигурной скобкой ...

Смежные вопросы