MKMapView - ноль, но IBOutlet правильно инициализирован - PullRequest
0 голосов
/ 06 мая 2018

Я делаю свой первый проект XCode, и я хочу создать приложение, в котором вы можете нажать tableviewcell, и тогда вы увидите, что они направлены к следующему detailpage, где местоположение находится на карте. Проблема в том, что я получаю поток, когда запускаю приложение:

Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения

и в моем выводе я вижу, что (MKMapView!) ноль равен.

Это мой код на моем MapViewController (страница сведений, где должна быть карта)

import UIKit
import MapKit

class MapViewController: UIViewController, MKMapViewDelegate{

  @IBOutlet weak var mijnMap: MKMapView!

  var currentDetail: Parking? {
    didSet {
      showInfoDetail()
    }
  }

  override func viewDidLoad() {
     super.viewDidLoad()
  }

  func showInfoDetail() {
    if let detail = currentDetail {
        let coordinaat = CLLocationCoordinate2D(latitude: CLLocationDegrees(detail.latitude)
            , longitude: CLLocationDegrees(detail.longitude))
        MKMapPointForCoordinate(coordinaat)
        mijnMap.centerCoordinate = coordinaat
        mijnMap.region = MKCoordinateRegionMakeWithDistance(coordinaat, 1000, 1000)
        let parkingAnnotation = MKPointAnnotation()
        parkingAnnotation.coordinate = coordinaat
        parkingAnnotation.title = detail.title
        parkingAnnotation.subtitle = detail.city

        mijnMap.addAnnotation(parkingAnnotation)
    }
  }
}

Я получаю угрозу на этой линии mijnMap.centerCoordinate = coordinaat Может кто-то помочь мне с этим? Спасибо!

1 Ответ

0 голосов
/ 06 мая 2018

Проблема в том, что из-за didSet в

var currentDetail: Parking? {
  didSet {
   showInfoDetail()
 }
}

когда вы пытаетесь установить currentDetail из другого VC, вызов метода showInfoDetail срабатывает, и это происходит до того, как VC представляется, что означает, что перед загрузкой представления происходит сбой, так как все IBOutlets еще не были инициализированы, поэтому задержите звонок на него в viewDidAppear или проверьте карту перед использованием

var currentDetail: Parking? {
  didSet { 
    if mijnMap != nil {
       showInfoDetail()
    }
  }
}

Обратите внимание, что во втором варианте у вас есть вызов showInfoDetail в viewDidLoad / viewDidAppear, я не предлагаю удалять didSet, так как вы можете изменить это строковое значение в MapViewController и вызвать ту же функцию каждое изменение

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