10

尝试向谷歌地图添加标记,但应用程序在函数调用时崩溃addMarker(),异常详情如下,

由于未捕获的异常“ GMSThreadException ”而终止应用程序,原因:“必须从 UI 线程进行对 iOS 版 Google Maps SDK 的所有调用”

仅供参考 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
}

任何帮助,将不胜感激,

TIA。

4

4 回答 4

26

在闭包中执行UI 更新时(在我的情况下 - 绘图标记),请记住获取主线程并仅在主线程上执行 UI 操作

我所做的错误是,我试图在 Web 服务完成块中绘制标记。

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
}

希望这对某人有帮助!

于 2015-07-08T12:46:51.883 回答
9
/// Marker - Google Place marker
let marker: GMSMarker = GMSMarker() // Allocating Marker

 marker.title = "Title" // Setting title
 marker.snippet = "Sub title" // Setting sub title
 marker.icon = UIImage(named: "") // Marker icon
 marker.appearAnimation = .pop // Appearing animation. default
 marker.position = location.coordinate // CLLocationCoordinate2D

DispatchQueue.main.async { // Setting marker on mapview in main thread.
   marker.map = mapView // Setting marker on Mapview
}
于 2018-12-19T13:24:28.073 回答
2
    @IBOutlet weak var mapView: GMSMapView!
override func viewDidLoad() {
        super.viewDidLoad()

        mapView.camera = GMSCameraPosition.camera(withLatitude: 18.514043, longitude: 57.377796, zoom: 6.0)
        let marker = GMSMarker(position: CLLocationCoordinate2D(latitude: 18.514043, longitude: 57.377796))
        marker.title = "Lokaci Pvt. Ltd."
        marker.snippet = "Sec 132 Noida India"
        marker.map = mapView
    }
于 2018-12-19T12:48:52.003 回答
1
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>))

这真的很简单..确保您的地图已通过这样做进行初始化

于 2015-07-08T09:43:16.257 回答