有些标记不会在使用iOS和Swift的Google地图中消失

时间:2017-06-21 22:10:49

标签: ios swift google-maps google-maps-api-3 swift3

我希望有人可以帮我找到这个,我从昨天起就遇到了这个问题并一直在寻找可能出错的地方,也许我错过了什么?我是新的(大约2个月使用mac)到iOS和Swift以及整个mac生态系统。

问题是我正在向原生iOS迁移一个依赖于大量标记(大约300到400,并且滞后很多)的Phonegap应用程序,其中一些可以被用户禁用(按组),删除标记时会出现问题,其中一些标记仍然像鬼一样,它们的map属性设置为nil,并且没有触发触摸事件(我已将它们设置为执行segue)

这是我用来存储对象然后删除它们的代码,目前我正在使用带数组的字典来确定要删除的标记。

我翻译了评论,因为它们是西班牙语,因此您可以了解我在短期内做了什么(或尝试做什么)。

这是我添加标记的代码,我也知道可能有更好的方法来做一些事情,比如

//parses some data, and retrieves some more to create the markers
func procesaMarcadores(retorno: [String:Any]) {

    //skiped a lot of previous code

    if let servicios = retorno["servicios"] as? NSArray {

        //a simple cycle to iterate through data recieved
        for item in servicios {
            let items = item as! NSDictionary

            //lazy, easy, and dirty way to retrieve latitude and longitude, must change
            let latitud = (items["direccion_georeferenciada_latitud"] as! NSString).doubleValue
            let longitud = (items["direccion_georeferenciada_longitud"] as! NSString).doubleValue
            let foto = self.urlFotos + String((items["foto"] as! NSString))

            //new marker                
            let marker = GMSMarker()
            marker.position = CLLocationCoordinate2D(latitude: latitud, longitude: longitud)
            marker.userData = foto //a simple string with a url to use latter in the next view

            //setting mapView in main thread just for safety?, don't wanna mess something
            DispatchQueue.main.async(){
                marker.map = self.mapView
            }

            marker.icon = imagenChica //custom marker image

            //storing the objects in dictionary
            let tipo = items["id_tipo_servicio"] as! Int
            var arregloServicios = dicServicios[tipo] ?? []
            arregloServicios.append(marker)
            dicServicios[tipo] = arregloServicios
        }
    }
}

这里我删除了标记

//updates markers, gets new data for markers, and deletes markers
func actualizaMarcadores(marcadores: [Any]?, seleccionado: Int, perfil: Int?){

//lots of deleted code

//deletes markers group if variable noSale is set to delete markers of the group of the variable seleccionado
    if noSale {
        //asynchronous delete just to be safe?
        DispatchQueue.main.async {
            //whiping markers from mapView
            var arregloServicios = self.dicServicios[seleccionado]
            for i in arregloServicios! {
                i.map = nil
            }
            //releasing a bit of memory
            self.dicServicios[seleccionado] = nil
            //already tried not deleting the marker objects
        }
    }
}

我已经google了答案,我一直在研究,发现没有任何相关性,除了几年前,在旧的谷歌地图api有一个错误,但它是固定的,也在文档中搜索,但唯一的事情我发现删除标记的另一种方法是使用mapView.clear()然后我将不得不重新分配所有标记,并且cpu变为大约60%,这比使用一些编码不良的方法的CPU使用率低5%左右将字符串转换为int。

1 个答案:

答案 0 :(得分:0)

在此,我向您提供概述,您可以使用现有代码进行交叉检查

//second.js
module.exports.change=function(a){
a=localStorage.getItem('a')
}