在iOS模拟器上显示GMSMarkers时发生GMSThreadException
我正在开发一个应用程序,以在GMSMapView上显示大约200个GMSMarkers我尝试了2种方法来显示标记。 Method1有点慢,但没有发生错误,但是,Method2在真实设备上运行平稳,但我得到了GMSThreadException,当我在iOS模拟器上testing它
下面是问题:1.继续使用method2可以吗? 2.如果继续使用method2是不好的,那么有什么好的build议可以减less整个过程的加载时间?
func Method1() { for location in locationsArrayFromSomeWhere { let placeMarker = PlaceMarker(coordinate: location.coordinate) . .//Simple Setup . placeMarker.map = self.mapView } } func Method2() { dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.value), 0)) { for location in locationsArrayFromSomeWhere { let placeMarker = PlaceMarker(coordinate: location.coordinate) . .//Simple Setup . dispatch_async(dispatch_get_main_queue()) { placeMarker.map = self.mapView } } } } enter code here
任何帮助表示赞赏奥兹
UPDATE1
正如@ztan在下面回答的,我必须在主线程中做所有这些,有没有比这更好的解决scheme?
Google Maps iOA SDK要求所有绘图事件都在主线程上完成。
因此,对于第二种方法,必须将所有的制造商设置代码放入dispatch_get_main_queue()
闭包中。
所以你的方法2将是:
func Method2() { dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.value), 0)) { for location in locationsArrayFromSomeWhere { dispatch_async(dispatch_get_main_queue()) { let placeMarker = PlaceMarker(coordinate: location.coordinate) . .//Simple Setup . placeMarker.map = self.mapView } } } }
Swift 3.0
dispatch_async(dispatch_get_main_queue())
已经改名为
DispatchQueue.main.async
- Google Maps for iOS – 如何判断一个标记是否在屏幕的边界内?
- 使用其他旅行模式的Google地图方向XML或JSON
- 更新到IOS11和Xcode9后的问题! “com.google.Maps.LabelingBehavior”,“TIC Read Status”
- iOS:使用CLGeocoder与ReverseGeocoding进行比较 Google Geocoder API
- Google Maps sdk for iOS中多段线的轮廓
- 在iPhone中的Google地图中添加像UISlider或UIButtom这样的子视图
- 在谷歌地图上突出显示iOS和iOS的国家
- 关于在iOS中的Google地图SDK上跟踪路线
- 无法在ios中使用Google map sdk