我希望有人可以帮我找到这个,我从昨天起就遇到了这个问题并一直在寻找可能出错的地方,也许我错过了什么?我是新的(大约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。
答案 0 :(得分:0)
在此,我向您提供概述,您可以使用现有代码进行交叉检查
//second.js
module.exports.change=function(a){
a=localStorage.getItem('a')
}