Когда я добавляю MKCircle в оверлей mapKit, я получаю много предупреждений в компиляторе.

Я пытался выяснить, как избавиться от большого количества предупреждений на моем совете, и я пришел к выводу, что эти предупреждения появляются сразу после того, как я добавляю оверлеи в свой мапкит.

вот часть, где я добавляю оверлеи..

    let FireLocation = CLLocationCoordinate2D(latitude: 40.836352, longitude: 14.306019)
    let CircularRegion = CLCircularRegion(center: FireLocation, radius: 500, identifier: "fire")
    CircularRegion.notifyOnEntry = true
    CircularRegion.notifyOnExit = true
    self.locatManager.startMonitoring(for: CircularRegion)

     let geo = MKCircle(center: FireLocation, radius: CircularRegion.radius)
     mapkitView.addOverlay(geo)

после этого я настраиваю эти наложения на методе делегата...

  func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {

        guard let circularOverlay = overlay as? MKCircle else {return MKOverlayRenderer()}


        let renderer = MKCircleRenderer(overlay: circularOverlay)
        renderer.strokeColor = .red
        renderer.fillColor = .yellow
        renderer.alpha = 0.3
        renderer.lineWidth = 2

        return renderer
    }

предупреждения, которые я получил на консоли...

2018-10-25 15:09:04.919237+0200 SeeFire[37911:13344200] Это приложение модифицирует механизм автомакета из фонового потока после того, как доступ к нему был получен из основного потока. Это может привести к повреждению двигателя и странным авариям. 2018-10-25 15:09:04.921562+0200 SeeFire[37911:13344200] Это приложение модифицирует механизм автомакета из фонового потока после того, как доступ к нему был получен из основного потока. Это может привести к повреждению двигателя и странным авариям.

если я прокомментирую строки, где я добавляю оверлей, никаких предупреждений не появляется, и все идет нормально, что я делаю неправильно?

в чем разница между MKCircleRenderer и MKCircleView, как узнать, какой из них мне следует использовать?

заранее спасибо за ответы.


person Lucas    schedule 25.10.2018    source источник
comment
Вам нужно изменить пользовательский интерфейс в основном потоке. Очевидно, вы делаете что-то в фоновом потоке. Используйте DispatchQueue.main.async { //Put your code where you do UI stuff here }   -  person Larme    schedule 25.10.2018
comment
возможный дубликат заголовка [stackoverflow.com/questions/28302019/   -  person M Abubaker Majeed    schedule 25.10.2018


Ответы (1)


Попробуйте следующий код для доступа из основного потока.

DispatchQueue.main.async {
    mapkitView.addOverlay(geo)
}
person Kosuke Ogawa    schedule 26.10.2018