2016-12-01 3 views
0

내 서버에서 일부 지리 데이터를로드하고로드하고는 주석을 던져 표시 할 : 내가 한 그래서업데이트 주석은 HTTP

class Station: NSObject, MKAnnotation { 
    var identifier = "test" 
    var title: String? 
    var coordinate: CLLocationCoordinate2D 

    init(name:String, lat:CLLocationDegrees, long:CLLocationDegrees) { 
     title = name 
     coordinate = CLLocationCoordinate2DMake(lat, long) 
    } 
} 

는, 기본적으로 :

Alamofire.request("http://localhost:1234/app/data").responseJSON { response in 
    switch response.result { 
    case .success(let value): 
     let json = JSON(value) 
     var annotations = [Station]() 
     for (key, subJson):(String, JSON) in json { 
      let lat: CLLocationDegrees = subJson["latitude"].double! as CLLocationDegrees 
      let long: CLLocationDegrees = subJson["longtitude"].double! as CLLocationDegrees 
      self.annotations += [Station(name: "test", lat: lat, long: long)] 
     } 

     DispatchQueue.main.async { 
      let allAnnotations = self.mapView.annotations 
      self.mapView.removeAnnotations(allAnnotations) 
      self.mapView.addAnnotations(annotations) 
     } 

    case .failure(let error): 
     print(error) 
    } 
} 

Station 클래스를 :

원격 서비스에서 데이터를로드하고 이러한 데이터를 MKMapView에 주석으로 표시하십시오.

하지만 어떻게 든이 주석은 맵에로드되지 않습니다. 심지어 내가 먼저 "제거"하고 다음에 "추가"합니다.

제안 사항?

+0

당신이 당신의 응답에 중단 점을 설정, 모든 JSON 값이 예상대로 인쇄됩니까? 메서드의 각 섹션에 원하는 순서대로 충돌합니까? –

답변

0

로컬 변수가 아닌 self.annotations 속성에 Station 인스턴스를 추가하고 있습니다 (annotations). 따라서 annotations 로컬 var 여전히 빈 배열입니다. 모두 이러한 잠재적 혼란을 방지

var annotations = [Station]() 
for (key, subJson): (String, JSON) in json { 
    let lat = ... 
    let long = ... 
    annotations += [Station(name: "test", lat: lat, long: long)] // not `self.annotations` 
} 

을 아니면 map를 사용할 수 있습니다 :

물론, 당신이 annotations보다는 self.annotations를 참조하여 해당 문제를 해결할 수

let annotations = json.map { key, subJson -> Station in 
    Station(name: "test", lat: subJson["latitude"].double!, long: subJson["longitude"].double!) 
}