gpt4 book ai didi

ios - 重新加载 map 注释时出现问题

转载 作者:行者123 更新时间:2023-11-28 08:03:50 25 4
gpt4 key购买 nike

我正在制作一个应用程序,该应用程序应加载该州的所有加油站及其价格。如果用户选择不同类型的汽油(Magna、Premium 和 Diesel), map 应重新加载价格。这是通过 UISegment 控件完成的。

问题是,当我重新加载 map 时,它不会打印正确的价格(默认价格是 magna,当我选择其他类型的气体时,它不会加载新价格)。

这是我的代码。

class MapViewController: UIViewController,MKMapViewDelegate, CLLocationManagerDelegate,UICollectionViewDelegate, UICollectionViewDataSource {
let manager = CLLocationManager()
public let sMAGNA = "magna"
public let sPREMIUM = "premium"
public let sDIESEL = "diesel"
public let MIN_TIME: CLong = 400
private let MIN_DISTANCE: Float = 1000
private var ubicaciones_selected: [Ubicacion] = []
private var ubicaciones_magna: [Ubicacion] = []
private var ubicaciones_premium: [Ubicacion] = []
private var ubicaciones_diesel: [Ubicacion] = []
private let REQUEST_LOCATION = 1
private var latlon: String = ""
private var mType: String = "magna"
var ubicaciones:[Ubicacion] = []
var Ubigaspin = MKPointAnnotation()

@IBAction func MapType(_ sender: Any) {
if mapa.mapType == MKMapType.standard{
mapa.mapType = MKMapType.satellite
} else {
mapa.mapType = MKMapType.standard
}
}

override func viewDidLoad() {
super.viewDidLoad()
self.mapa.delegate = self
//con esto obtendremos la ubicacion del usuario
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
mapa.showsUserLocation = true
manager.startUpdatingLocation()

//se cargan los pines y las gasolinas
loadGas(tipo: mType)
}

func loadGas(tipo:String){
mType = tipo
var ubicaciones:[Ubicacion] = []
switch tipo {
case sMAGNA:
ubicaciones = ubicaciones_magna
case sPREMIUM:
ubicaciones = ubicaciones_premium
case sDIESEL:
ubicaciones = ubicaciones_diesel
default:
ubicaciones = ubicaciones_magna
}

if ubicaciones.count == 0 {
let url = URL(string: "http://192.241.214.56/api/"+tipo+"/?format=json")
URLSession.shared.dataTask(with: url!, completionHandler: {
(data, response, error) in
if(error != nil){
print("error")
}else{
do{
let ubicaciones_json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [[String : AnyObject]]

for ubicacion in ubicaciones_json{
let nombre:String = ubicacion["nombre"] as! String
let direccion:String = ubicacion["direccion"] as! String
let precio_magna:Float = ubicacion["precio_magna"] as! Float
let precio_premium:Float = ubicacion["precio_premium"] as! Float
let precio_diesel:Float = ubicacion["precio_diesel"] as! Float
let ubicacion:String = ubicacion["ubicacion"] as! String

let p = Ubicacion()
p.ubicacion = ubicacion
p.setLatLng()
p.nombre = nombre
p.direccion = direccion

p.precio_magna = precio_magna
p.precio_premium = precio_premium
p.precio_diesel = precio_diesel

ubicaciones.append(p)
}


self.ubicaciones = ubicaciones

OperationQueue.main.addOperation({
self.updatePins(ubicaciones: ubicaciones)
})

}catch let error as NSError{
print(error)
}
}
}).resume()
}else{
self.ubicaciones = ubicaciones
self.updatePins(ubicaciones: ubicaciones)
}
}
func updatePins(ubicaciones:[Ubicacion]){
mapa.removeAnnotations(mapa.annotations)

for ubicacion in ubicaciones{

let anno = CustonAnno(ubicacion:ubicacion, image: #imageLiteral(resourceName: "icon"))
anno.coordinate = CLLocationCoordinate2D(latitude: ubicacion.latitude!, longitude: ubicacion.longitude!)
anno.title=ubicacion.nombre
//anno.subtitle="$\(ubicacion.getPrecio(tipo: mType))"
self.mapa.addAnnotation(anno)
}
}

@IBAction func changeSegment(_ sender: UISegmentedControl) {
print(sender.selectedSegmentIndex)
switch sender.selectedSegmentIndex {
case 0:
loadGas(tipo: sMAGNA)
case 1:
loadGas(tipo: sPREMIUM)
case 2:
loadGas(tipo: sDIESEL)
default:
loadGas(tipo: sMAGNA)
}
}
}

最佳答案

我认为你的问题出在你的 ubicaciones 变量上,你有一个本地变量和一个同名的实例变量,你需要一直使用你的实例变量而不是创建另一个,你还会一次又一次地丢失您的信息 每次您更改燃气类型时都需要进行网络调用

尝试替换您的loadGas 方法

由这个

func loadGas(tipo:String){
mType = tipo
switch tipo {
case sMAGNA:
if(ubicaciones_magna.count > 0){
self.ubicaciones = ubicaciones_magna
self.updatePins(ubicaciones: self.ubicaciones)
return
}
case sPREMIUM:
if(ubicaciones_premium.count > 0){
self.ubicaciones = ubicaciones_premium
self.updatePins(ubicaciones: self.ubicaciones)
return
}
case sDIESEL:
if(ubicaciones_diesel.count > 0){
self.ubicaciones = ubicaciones_diesel
self.updatePins(ubicaciones: self.ubicaciones)
return
}
default:
if(ubicaciones_magna.count > 0){
self.ubicaciones = ubicaciones_magna
self.updatePins(ubicaciones: self.ubicaciones)
return
}
}

let url = URL(string: "http://192.241.214.56/api/"+tipo+"/?format=json")
URLSession.shared.dataTask(with: url!, completionHandler: {
(data, response, error) in
if(error != nil){
print("error")
}else{
do{
let ubicaciones_json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [[String : AnyObject]]

var newUbications:[Ubicacion] = []

for ubicacion in ubicaciones_json{
let nombre:String = ubicacion["nombre"] as! String
let direccion:String = ubicacion["direccion"] as! String
let precio_magna:Float = ubicacion["precio_magna"] as! Float
let precio_premium:Float = ubicacion["precio_premium"] as! Float
let precio_diesel:Float = ubicacion["precio_diesel"] as! Float
let ubicacion:String = ubicacion["ubicacion"] as! String

let p = Ubicacion()
p.ubicacion = ubicacion
p.setLatLng()
p.nombre = nombre
p.direccion = direccion

p.precio_magna = precio_magna
p.precio_premium = precio_premium
p.precio_diesel = precio_diesel

newUbications.append(p)
}

switch tipo {
case sMAGNA:
self.ubicaciones_magna = newUbications
self.ubicaciones = self.ubicaciones_magna
case sPREMIUM:
self.ubicaciones_premium = newUbications
self.ubicaciones = self.ubicaciones_premium
case sDIESEL:
self.ubicaciones_diesel = newUbications
self.ubicaciones = ubicaciones_diesel
default:
self.ubicaciones_magna = newUbications
self.ubicaciones = self.ubicaciones_magna
}


OperationQueue.main.addOperation({
self.updatePins(ubicaciones: self.ubicaciones)
})

}catch let error as NSError{
print(error)
}
}
}).resume()
}

关于ios - 重新加载 map 注释时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45764609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com