使用swift项目进行攻击19我一直遇到致命的错误:在展开Optional值时意外地发现了nil

时间:2017-01-10 16:20:30

标签: swift cllocationmanager

所以我正在通过项目19学习如何在地图上放下引脚。基本上我已经达到了作者在我的viewController.swift文件和我的Capital.swift文件中完全相同的地步。应用程序将成功构建,但是一旦它到达以下部分就会崩溃,说有一个致命错误:在展开可选值时意外发现nil mapView.addAnnotation(london)mapView.addAnnotation(oslo)mapView.addAnnotation(paris) mapView.addAnnotation(rome)mapView.addAnnotation(washington) 这是我的整个ViewController.swift文件

import UIKit import MapKit
class ViewController: UIViewController {
@IBOutlet weak var mapView: MKMapView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    let london = Capital(title: "London", coordinate: CLLocationCoordinate2D(latitude: 51.507222, longitude: -0.1275), info: "Home to the 2012 Summer Olympics.")
    let oslo = Capital(title: "Oslo", coordinate: CLLocationCoordinate2D(latitude: 59.95, longitude: 10.75), info: "Founded over a thousand years ago.")
    let paris = Capital(title: "Paris", coordinate: CLLocationCoordinate2D(latitude: 48.8567, longitude: 2.3508), info: "Often called the City of Light.")
    let rome = Capital(title: "Rome", coordinate: CLLocationCoordinate2D(latitude: 41.9, longitude: 12.5), info: "Has a whole country inside it.")
    let washington = Capital(title: "Washington DC", coordinate: CLLocationCoordinate2D(latitude: 38.895111, longitude: -77.036667), info: "Named after George himself.")

    mapView.addAnnotation(london)
    mapView.addAnnotation(oslo)
    mapView.addAnnotation(paris)
    mapView.addAnnotation(rome)
    mapView.addAnnotation(washington)

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

很抱歉,如果这是过度杀伤,如果有更简单的方法来显示问题,请告诉我。任何和所有的帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)

首先,正如评论中所建议的那样,您是否已将故事板中的IBOutlet连接起来?

如果有,请试试这个:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    mapView.addAnnotation(london)
    mapView.addAnnotation(oslo)
    mapView.addAnnotation(paris)
    mapView.addAnnotation(rome)
    mapView.addAnnotation(washington)
}

并从viewDidLoad

中删除mapView.addAnnotation()