TableCell перейдет к mapkit - PullRequest
       6

TableCell перейдет к mapkit

0 голосов
/ 06 сентября 2018

Я пытаюсь использовать segue для передачи аннотации в mapkit, но когда я тестирую ее, все равно в конечном итоге приводим к фатальной ошибке: неожиданно найдено nil при развертывании необязательного значения аннотация не nil obj, но mapView

следующий код в контроллере tableView

if segue.identifier == "FocusOn"{
        let path = tableView.indexPathForSelectedRow
        let controller = segue.destination as! MapViewController
        let animal = animalList[(path?.row)!]
        let annotationFocus = FencedAnnotation(newTitle: animal.name!, newSubtitle: animal.animaldescription!, lat: animal.latitude, long: animal.longtitude, newType: animal.type!, newPhoto: animal.photo!)
        controller.addAnnotation(annotation: annotationFocus)
    }

}

функция в контроллере карты

 func addAnnotation(annotation: FencedAnnotation) {
    self.mapView.addAnnotation(annotation)
    self.mapView.delegate = self
}

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

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

Для этого не звоните addAnnotation в вашем tableViewController, а вместо этого отправляйте аннотацию прямо на ваш mapViewController и вызывайте addAnnotation в viewDidAppear или viewDidLoad.

В вашем mapViewController вам нужно

var annotation: FencedAnnotation!

В вашем tableViewController отправьте аннотацию на mapViewController как

let annotationFocus = FencedAnnotation(newTitle: animal.name!, newSubtitle: animal.animaldescription!, lat: animal.latitude, long: animal.longtitude, newType: animal.type!, newPhoto: animal.photo!)
controller.annotation = annotationFocus

и звоните addAnnotation в viewDidAppear как

override func viewDidAppear(_ animated: Bool) { 
   addAnnotation(annotation)
}
0 голосов
/ 06 сентября 2018

Я не получаю полную картину, основанную на том, что вы объяснили, но я постараюсь ответить вам. Я бы порекомендовал установить переменную с именем annotation в MapViewController. Затем в вашем коде функции переопределения func prepare () вы должны установить для этой переменной значение annotationFocus. Это может показаться немного запутанным, но попробуйте поместить этот кусок кода в ваш tableViewController.

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
        if segue.identifier == "FocusOn"{
            if let controller = segue.destination as? MapViewController {
                let path = tableView.indexPathForSelectedRow
                let animal = animalList[(path?.row)!]
                let annotationFocus = FencedAnnotation(newTitle: animal.name!, newSubtitle: animal.animaldescription!, lat: animal.latitude, long: animal.longtitude, newType: animal.type!, newPhoto: animal.photo!)
                controller.annotation = annotationFocus
            }
        }
    }

Тогда я бы поместил это в ваш mapViewController

    var annotation = FencedAnnotation()

    func addAnnotation() {
        self.mapView.addAnnotation(annotation)
        self.mapView.delegate = self
    }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        addAnnotation() 
    }

Когда вы выполняете segue, для аннотации в mapViewController устанавливается значение annotationFocus. Вот почему вам не нужен аргумент при выполнении addAnnotation (). Я надеюсь, что это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...