mapView.addAnnotation () Не добавляет булавки к карте, пока не коснется карты - PullRequest
0 голосов
/ 29 октября 2018

У меня есть mapView из раскадровки, и все работает, кроме одной вещи: аннотации, которые я делаю из вызова RESTful и добавляем на карту mapView.addAnnotation (), не отображаются на карте, пока я не коснусь и не переместу карта. Вот соответствующий код:

class ViewController: UIViewController, MKMapViewDelegate {
    @IBOutlet weak var mapView: MKMapView!

    override func viewDidLoad() {
       super.viewDidLoad()
       self.mapView.delegate = self

       // API Call
       URLSession.shared.dataTask(with: mRequest) {
       (data, response, error) in do {

           let data = data

       ...

          let annotation = MKPointAnnotation()
          annotation.coordinate = CLLocationCoordinate2DMake(lat!, lon!)
          annotation.title = name as? String
          annotation.subtitle = details as? String
          self.mapView.addAnnotation(annotation)

       }
       ...
       }.resume()

    }
  }

1 Ответ

0 голосов
/ 29 октября 2018

Проблема в том, что вы обновляете пользовательский интерфейс из фонового потока. Блок, в который вы добавляете аннотации, возникает в результате выполнения задачи DataTask, и это происходит в фоновом режиме. Оберните код аннотации в блок DispatchQueue.main.async { }, и вы увидите, что аннотации отображаются нормально.

DispatchQueue.main.async{
      let annotation = MKPointAnnotation()
      annotation.coordinate = CLLocationCoordinate2DMake(lat!, lon!)
      annotation.title = name as? String
      annotation.subtitle = details as? String
      self.mapView.addAnnotation(annotation)
}
...