Как добавить маркер для просмотра карты в Google Maps SDK для iOS в Swift

Попытка добавить маркер на карту Google, но приложение аварийно завершает работу при вызове функции addMarker(). Детали исключения следующие:

Завершение работы приложения из-за необработанного исключения "GMSThreadException", причина: "Все вызовы Google Maps SDK для iOS должны выполняться из потока пользовательского интерфейса"

FYI vwGogleMap является глобальным, и в функции я пытаюсь построить маркер.

func addMarker() -> Void
{
    var vwGogleMap : GMSMapView?
    var position = CLLocationCoordinate2DMake(17.411647,78.435637)
    var marker = GMSMarker(position: position)
    marker.title = "Hello World"
    marker.map = vwGogleMap
}

Любая помощь будет оценена по достоинству,

ТИА.


person Naresh Reddy M    schedule 08.07.2015    source источник
comment
Обычно это означает, что вы помещаете код в фоновый поток вместо потока пользовательского интерфейса. Не могли бы вы предоставить больше кода, пожалуйста? Итак, я мог видеть, где вы помещаете этот код в свой файл.   -  person thanyaj    schedule 08.07.2015
comment
в контроллере представления в верхнем классе ViewController: UIViewController { var Gmap: GMSMapView? переопределить func viewDidLoad() { super.viewDidLoad() self. addMarker() } func addMarker { var position = CLLocationCoordinate2DMake(17.411647, 78.435637) var marker: GMSMarker = GMSMarker(position: position) as GMSMarker marker.title = Hello World marker.map = Gmap } }   -  person Naresh Reddy M    schedule 08.07.2015


Ответы (2)


Выполняя обновления пользовательского интерфейса в замыканиях (в моем случае — маркеры построения), не забудьте получить основной поток и выполнить операции пользовательского интерфейса только в основном потоке.

Ошибка в том, что я сделал, я пытаюсь построить маркеры в блоке завершения веб-сервиса.

dispatch_async(dispatch_get_main_queue(),
{
    var position = CLLocationCoordinate2DMake(17.411647,78.435637)
    var marker = GMSMarker(position: position)
    marker.title = "Hello World"
    marker.map = vwGogleMap
})

// For swift 3.0 support.
// 1. Get Main thread
DispatchQueue.main.async
{
    // 2. Perform UI Operations.
    var position = CLLocationCoordinate2DMake(17.411647,78.435637)
    var marker = GMSMarker(position: position)
    marker.title = "Hello World"
    marker.map = vwGoogleMap
}

Надеюсь, это поможет кому-то!

person Naresh Reddy M    schedule 08.07.2015
comment
Спасибо дружище! Вы сэкономили мое время. - person Ashwinkumar Mangrulkar; 01.10.2015
comment
Спасибо за ваш код. Это помогло мне решить проблему сбоя приложения, когда я пытался нарисовать ломаную линию в замыкании. - person Shinichi; 08.05.2016
comment
@нареш Редди . Подскажите, пожалуйста, как изменить положение маркера на картах Google. - person Uma Madhavi; 30.03.2017
comment
@Madhavi marker.position = CLLocationCoordinate2DMake(17.411647,78.435637) Надеюсь, это поможет. - person Naresh Reddy M; 30.03.2017

var marker = GMSMarker()
marker.location = location
marker.title = location.name
marker.snippet = "Info window text"
marker.map = mapView

Свойство location должно быть установлено с помощью CLLocationCoordinate2D

Чтобы сделать новую координату местоположения, используйте это:

 CLLocationCoordinate2D(latitude: CLLocationDegrees(<latitude>), longitude: CLLocationDegrees(<longitude>))

Это действительно просто. Убедитесь, что ваша карта инициализирована, выполнив это

person siegy22    schedule 08.07.2015