MKMapView为零,但IBOutlet正确初始化

时间:2018-05-06 14:11:09

标签: ios mapkit

我正在创建我的第一个XCode项目,我想创建一个应用程序,您可以点击MKMapView!,然后您可以看到指向位于地图上的下一个MapViewController 。问题是我在运行应用程序时得到一个帖子:

  

致命错误:在解包可选值时意外发现nil

在我的输出中我看到(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) } } } )nil是。

这是我mijnMap.centerCoordinate = coordinaat上的代码(地图应该是的详细信息页面)

SELECT * FROM "Table1" WHERE "Record-Id" = :Record-Id

我在这一行上遇到了威胁def main (oEvent): ctx = XSCRIPTONTONT.getComponentContext (); mri (ctx, oEvent); 有人可以帮我弄这个吗?谢谢!

1 个答案:

答案 0 :(得分:0)

问题在于因为{/ 1}}

didSet

当您尝试从另一个VC设置var currentDetail: Parking? { didSet { showInfoDetail() } } 时,对方法currentDetail的调用会触发,这会在VC显示之前发生,这意味着在视图加载之前导致崩溃,因为所有IBOutlet还没有已初始化,因此请在showInfoDetail中延迟对其的调用,或在使用前检查地图

viewDidAppear

请注意,您在var currentDetail: Parking? { didSet { if mijnMap != nil { showInfoDetail() } } } / showInfoDetail中的viewDidLoad处的第二个选项中,我并不是建议删除viewDidAppear,因为您可能希望更改该字符串值didSet并在每次更改时触发相同的功能